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

来源:互联网 发布:关于人工智能的作文 编辑:程序博客网 时间:2024/04/28 11:40
第一部分 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 0
原创粉丝点击