viewpager怎么实现画廊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了viewpager怎么实现画廊相关的知识,希望对你有一定的参考价值。

参考技术A 最外层用ViewPager,轮播广告用AutoScrollViewPager,作为此fragment里listView的headView即可。

android怎么viewpager实现循环切换图片

Android中的ViewPager则实现了左右滑动的效果,ViewPager类提供了多界面切换的新效果。利用ViewPager实现图片循环滚动代码如下:

1、首先是布局文件,使用了一个ViewPager控件:       
      

<span style="padding: 0px; margin: 0px; font-size: 14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_ >
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_
        android:layout_ >
    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:layout_
        android:layout_
        android:layout_alignBottom="@id/viewpager"
        android:background="#33000000"
        android:orientation="vertical"
        android:padding="5dip" >
        <TextView
            android:id="@+id/tv_image_description"
            android:layout_
            android:layout_
            android:layout_gravity="center_horizontal"
            android:text="第一个引导页面"
            android:textColor="@android:color/white"
            android:textSize="14sp" />
        <LinearLayout
            android:id="@+id/ll_points"
            android:layout_
            android:layout_
            android:layout_marginTop="5dip"
            android:layout_gravity="center_horizontal"
            android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>
</RelativeLayout></span>

2、接下来实现一个继承PagerAdapter的MyAdapter类,实现一个PagerAdapter,代码如下:

<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
class ViewPagerAdapter extends PagerAdapter 
    private List<ImageView> mImageViewList;
    public ViewPagerAdapter(List<ImageView> imageViewList) 
        super();
        this.mImageViewList = imageViewList;
    
    /**
     * 该方法将返回所包含的 Item总个数。为了实现一种循环滚动的效果,返回了基本整型的最大值,这样就会创建很多的Item,
     * 其实这并非是真正的无限循环。
     */
    @Override
    public int getCount() 
        return Integer.MAX_VALUE;
    
         /**
     * 判断出去的view是否等于进来的view 如果为true直接复用
     */
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) 
        return arg0 == arg1;
    
    /**
     * 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来,就是position,
     * 因为mImageViewList只有五条数据,而position将会取到很大的值,
     * 所以使用取余数的方法来获取每一条数据项。
     */
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) 
        container.removeView(mImageViewList.get(position % mImageViewList.size()));
    
    /**
     * 创建一个view,
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) 
        container.addView(mImageViewList.get(position % mImageViewList.size()));
        return mImageViewList.get(position % mImageViewList.size());
    

</span>

3、最后是主界面部分的代码:

<span style="padding: 0px; margin: 0px; font-size: 14px;">package com.example.viewpagertest;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity implements OnPageChangeListener 

    private List<ImageView> imageViewList;
    private TextView tvDescription;
    private LinearLayout llPoints;
    private String[] imageDescriptions;
    private int previousSelectPosition = 0;
    private ViewPager mViewPager;
    private boolean isLoop = true;
    private Handler handler = new Handler() 

        @Override
        public void handleMessage(Message msg) 
            super.handleMessage(msg);

            mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
        
    ;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setView();
        initView();
    

    public void setView() 
        setContentView(R.layout.activity_splash_viewpager);

        // 自动切换页面功能
        new Thread(new Runnable() 

            @Override
            public void run() 
                while (isLoop) 
                    SystemClock.sleep(2000);
                    handler.sendEmptyMessage(0);
                
            
        ).start();
    

    public void initView() 
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        tvDescription = (TextView) findViewById(R.id.tv_image_description);
        llPoints = (LinearLayout) findViewById(R.id.ll_points);
        
        prepareData();
        
        ViewPagerAdapter adapter = new ViewPagerAdapter(imageViewList);
        mViewPager.setAdapter(adapter);
        mViewPager.setOnPageChangeListener(this);
        
        tvDescription.setText(imageDescriptions[previousSelectPosition]);
        llPoints.getChildAt(previousSelectPosition).setEnabled(true);
        
        /**
         * 2147483647 / 2 = 1073741820 - 1 
         * 设置ViewPager的当前项为一个比较大的数,以便一开始就可以左右循环滑动
         */
        int n = Integer.MAX_VALUE / 2 % imageViewList.size();
        int itemPosition = Integer.MAX_VALUE / 2 - n;
        
        mViewPager.setCurrentItem(itemPosition);
    
    
     private void prepareData() 
            imageViewList = new ArrayList<ImageView>();
            int[] imageResIDs = getImageResIDs();
            imageDescriptions = getImageDescription();
            
            ImageView iv;
            View view;
            for (int i = 0; i < imageResIDs.length; i++) 
                iv = new ImageView(this);
                iv.setBackgroundResource(imageResIDs[i]);
                imageViewList.add(iv);
                
                // 添加点view对象
                view = new View(this);
                view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
                LayoutParams lp = new LayoutParams(5, 5);
                lp.leftMargin = 10;
                view.setLayoutParams(lp);
                view.setEnabled(false);
                llPoints.addView(view);
            
        
        
        private int[] getImageResIDs() 
            return new int[]
                    R.drawable.bg1,
                    R.drawable.bg2,
                    R.drawable.bg3,
                    R.drawable.pic_01,
                    R.drawable.pic_02
            ;
        
        
        private String[] getImageDescription() 
            return new String[]
                    "第一个引导页面",
                    "第二个引导页面",
                    "第三个引导页面",
                    "第四个引导页面",
                    "第五个引导页面"
            ;
        
        @Override
        public void onPageScrollStateChanged(int arg0) 
            
        
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) 
            
        
        @Override
        public void onPageSelected(int position) 
            // 改变图片的描述信息
            tvDescription.setText(imageDescriptions[position % imageViewList.size()]);
            // 切换选中的点,把前一个点置为normal状态
            llPoints.getChildAt(previousSelectPosition).setEnabled(false);
            // 把当前选中的position对应的点置为enabled状态
            llPoints.getChildAt(position % imageViewList.size()).setEnabled(true);
            previousSelectPosition = position  % imageViewList.size();
        
    @Override
    protected void onDestroy() 
        super.onDestroy();
        isLoop = false;
    

</span>
参考技术A ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->properties->Java Build Path->Libraries->Add External Jars中加入sdk目录下的extras/android/support/v4/android-support-v4.jar(如果找不到,则需要用sdk manager下载android support package)。加入这个jar包之后就可以使用ViewPager类了。本回答被提问者和网友采纳

以上是关于viewpager怎么实现画廊的主要内容,如果未能解决你的问题,请参考以下文章

android ViewPager 进阶(仿画廊/图书翻页) 与 palette 使用 (含完整Demo)

Android -- 使用ViewPager实现画廊效果

利用ViewPager实现3D画廊效果及其图片加载优化

自定义View 之利用ViewPager 实现画廊效果(滑动放大缩小)

自定义View 之利用ViewPager 实现画廊效果(滑动放大缩小)

android画廊怎样做出超炫效果