Android菜鸟练习第二课 ViewPager自动循环加载网络图片

第一部分 Activity中代码

public class MainActivity extends Activity {

    private ViewPager mViewPager;
    // 记录当前的页数
    private int mCount = 0;
    // 开始
    public static final int START = -1;
    // 停止
    public static final int STOP = -2;
    // 更新
    public static final int UPDATE = -3;
    // 接受传过来的当前页面数
    public static final int RECORD = -4;
    private List<ImageView> mList;
    private MyPagerAdapter mAdapter;
    private List<String> urlList;
    private ImageView dot1, dot2, dot3, dot0;
    private ImageView[] dots = new ImageView[4];
    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {

            switch (msg.what) {
                case START:
                    handler.sendEmptyMessageDelayed(UPDATE, 3000);
                    break;
                case STOP:
                    handler.removeMessages(UPDATE);
                    break;
                case UPDATE:
                    mCount++;
                    mViewPager.setCurrentItem(mCount);
                    break;
                case RECORD:
                    mCount = msg.arg1;
                    break;

                default:
                    break;
            }

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        init();
        setListener();
        mAdapter = new MyPagerAdapter(mList);
        mViewPager.setAdapter(mAdapter);
        int i = Integer.MAX_VALUE / 2 % mList.size();
        // 默认在中间,让用户看不到边界
        mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 - i);
        handler.sendEmptyMessage(START);
    }

    private void init() {
        // TODO Auto-generated method stub
        urlList = new ArrayList<String>();
        mList = new ArrayList<ImageView>();
        urlList.add("http://tupian.enterdesk.com/2015/saraxuss/04/17/gou/1/3.jpg");
        urlList.add("http://s2.nuomi.bdimg.com/upload/deal/2014/1/V_L/623682-1391756281052.jpg");
        urlList.add("http://media.chunyuyisheng.com/media/images/2013/05/15/9173ce6d26d9.jpg");
        urlList.add("http://img1.imgtn.bdimg.com/it/u=1856251628,4049763171&fm=21&gp=0.jpg");

        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheInMemory(true).displayer(new RoundedBitmapDisplayer(50))
                .displayer(new FadeInBitmapDisplayer(100)).cacheOnDisk(true)
                .bitmapConfig(Bitmap.Config.RGB_565).build();

        ImageView imageView;
        for (int i = 0; i < 4; i++) {
            imageView = new ImageView(MainActivity.this);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            // 使用的ImageLoader网络加载图片,需先在Application和清单文件中配置在使用
            ImageLoader.getInstance().displayImage(urlList.get(i), imageView,
                    options);
            mList.add(imageView);
            imageView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    System.out.println("==========m==" + mCount % mList.size());
                    // 这里写点击图片的操作 mCount % mList.size()这个点击的第几个图片
                }
            });
        }
    }

    private void initView() {
        // TODO Auto-generated method stub
        mViewPager = (ViewPager) findViewById(R.id.viewPager);
        dot0 = (ImageView) findViewById(R.id.dot1);
        dot1 = (ImageView) findViewById(R.id.dot2);
        dot2 = (ImageView) findViewById(R.id.dot3);
        dot3 = (ImageView) findViewById(R.id.dot4);
        dots[0] = dot0;
        dots[1] = dot1;
        dots[2] = dot2;
        dots[3] = dot3;
        dot0.setSelected(true);
    }

    private void setListener() {
        // TODO Auto-generated method stub
        mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                handler.sendMessage(Message.obtain(handler, RECORD, arg0, 0));
                // 下面是控制点的变化
                int j = arg0 % mList.size();
                for (int i = 0; i < dots.length; i++) {
                    dots[i].setSelected(false);
                }
                dots[j].setSelected(true);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub
                switch (arg0) {
                    // 当滑动时让当前轮播停止
                    case ViewPager.SCROLL_STATE_DRAGGING:
                        handler.sendEmptyMessage(STOP);
                        break;
                    // 滑动停止时继续轮播
                    case ViewPager.SCROLL_STATE_IDLE:
                        handler.sendEmptyMessage(START);
                        break;
                }
            }
        });

    }
}
第二部分 Application中代码
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration
                .createDefault(getApplicationContext());
        ImageLoader.getInstance().init(configuration);
    }
}
第三部分 适配器中代码
public class MyPagerAdapter extends PagerAdapter {

    private List<ImageView> imageViews;

    public MyPagerAdapter(List<ImageView> list) {
        super();
        imageViews = list;
        // TODO Auto-generated constructor stub
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0 == arg1;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub
        // 因为实际只有几个页面但是我们要无限循环,所以取模计算出当前的是第几个页面
        int i = position % imageViews.size();
        // 预防负值
        position = Math.abs(i);
        ImageView imageView = imageViews.get(position);
        ViewParent parent = imageView.getParent();
        // remove掉View之前已经加到一个父控件中,否则报异常
        if (parent != null) {
            ViewGroup group = (ViewGroup) parent;
            group.removeView(imageView);
        }
        container.addView(imageView);
        return imageView;
    }
}
第四部分 布局中的代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

   <android.support.v4.view.ViewPager
       android:id="@+id/viewPager"
       android:layout_width="wrap_content"
       android:layout_height="200dp"
       >
   </android.support.v4.view.ViewPager>
<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_horizontal"
    android:layout_alignBottom="@id/viewPager"
    android:layout_marginBottom="10dp"
    >
    <ImageView 
        android:id="@+id/dot1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        
        android:src="@drawable/dot_layout"/>
    <ImageView 
        android:id="@+id/dot2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_margin="5dp"
        android:src="@drawable/dot_layout"/>
    <ImageView 
        android:id="@+id/dot3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_margin="5dp"
        android:src="@drawable/dot_layout"/>
    <ImageView 
        android:id="@+id/dot4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         android:layout_margin="5dp"
        android:src="@drawable/dot_layout"/>
    
    
</LinearLayout>
</RelativeLayout>
第五部分 清单文件中的代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.liying.viewpager">

    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:name=".MyApplication"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android中,ViewPager可以通过PagerAdapter来动态View。PagerAdapter是一个抽象类,需要实现以下方法: 1. getCount():返回ViewPager中的View数量。 2. instantiateItem():创建并返回指定位置的View。 3. destroyItem():销毁指定位置的View。 具体实现步骤如下: 1. 创建一个继承自PagerAdapter的类,实现上述三个方法。 2. 在instantiateItem()方法中,根据指定位置创建View,并将其添ViewPager中。 3. 在destroyItem()方法中,将指定位置的View从ViewPager中移除。 4. 在使用ViewPager时,将PagerAdapter的实例设置给ViewPager。 示例代码如下: ``` public class MyPagerAdapter extends PagerAdapter { private List<View> mViewList; public MyPagerAdapter(List<View> viewList) { mViewList = viewList; } @Override public int getCount() { return mViewList.size(); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = mViewList.get(position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { View view = mViewList.get(position); container.removeView(view); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } ``` 使用时,可以先创建一个List<View>,然后将需要显示的View添到List中,并将List传入MyPagerAdapter的构造函数。最后将MyPagerAdapter的实例设置给ViewPager即可。 ``` List<View> viewList = new ArrayList<>(); viewList.add(view1); viewList.add(view2); viewList.add(view3); MyPagerAdapter adapter = new MyPagerAdapter(viewList); viewPager.setAdapter(adapter); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值