android ViewPager 简单多线程加载本地图片

来源:互联网 发布:知乎 dota2 编辑:程序博客网 时间:2024/05/17 02:04

在自己做一个简单的APP过程中,使用了ViewPager这一部件来实现图片轮播,在轮播过程中出现了很多问题,比如说掉帧的问题,也就是在加载图片时UI进程做了太多的操作导致skip.接下来就来探讨一下这个问题

//将图片装载到数组中,这里新开了一个数组用来存,到最后addAll到一个static数组进行操作,如果不这样做将会出现空指针错误。        new Thread() {            public void run() {                ImageView imageView1 = new ImageView(MainActivity.this);                ImageView imageView2 = new ImageView(MainActivity.this);                ImageView imageView3 = new ImageView(MainActivity.this);                ImageView imageView4 = new ImageView(MainActivity.this);                ArrayList<ImageView> mmImageViews = new ArrayList<>();                imageView1.setBackgroundResource(imgIdArray[0]);                mmImageViews.add(imageView1);                imageView2.setBackgroundResource(imgIdArray[1]);                mmImageViews.add(imageView2);                imageView3.setBackgroundResource(imgIdArray[2]);                mmImageViews.add(imageView3);                imageView4.setBackgroundResource(imgIdArray[3]);                mmImageViews.add(imageView4);                mImageViews.addAll(mmImageViews);                Message msg = new Message();                msg.what = 0;                mHandler.sendMessage(msg);            }        }.start();
//实现Handle机制,在这里刷新UI public Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case 0:                    viewPager.setAdapter(pageradapter);                    //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动                    viewPager.setCurrentItem((mImageViews.size()) * 100);                    viewPager.setOnPageChangeListener(MainActivity.this);                    break;                case 1:                    listView = (ListView) findViewById(R.id.listview);                    list_Adapter myListAdapter = new list_Adapter(MainActivity.this, informations);                    listView.setOnItemClickListener(MainActivity.this);                    listView.setAdapter(myListAdapter);                default:                    break;            }            super.handleMessage(msg);        }    };

总结:
开始的时候报空指针错误是因为没有把刷新UI放到Handle里而且没有子线程中获取的数组没有通过static数组传递出来,这样直接使用时就会报空指针错误。

1 0
原创粉丝点击