简单的图片自动切换效果实现

我们经常看见很多软件有图片自动切换的效果,看上去很高大上。其实做一个简单的效果很简单,用ViewPager实现

先是简单的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl_home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.mobilesafe.HomeActivity">
     <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="150dp" />
 </LinearLayout>

现在是java代码

public class HomeActivity extends Activity {
    private ViewPager vp = null;
    private ScheduledExecutorService scheduledExecutorService=null;
    private int currentItem = 0;//当前页面
    private ArrayList<ImageView> imageViews;    //存放imageview的集合类
    //存放图片id的数组
     private static int[] imageResIds = new int[]{R.drawable.smile,
            R.drawable.b,R.drawable.d,R.drawable.f,R.drawable.h,
            R.drawable.g
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_home);
        vp = (ViewPager) findViewById(R.id.vp);
         //滑动的图片
        imageViews = new ArrayList<ImageView>();
        for (int i = 0; i < imageResIds.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(imageResIds[i]);
            //之前没设置这个属性,运行时图片并没有填满viewpager,这个与图片大小相关,可以试一下
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 

            imageViews.add(imageView);
        }

        //给VviewPager添加数据
        vp.setAdapter(new MyAdapter());
        
     }
     //自定义的适配器
     class MyAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return imageResIds.length;
        }

        //实例化item
        @Override
        public Object instantiateItem(View arg0, int arg1) {
            //将每个图片加入到ViewPager里
            ((ViewPager) arg0).addView(imageViews.get(arg1));
            return imageViews.get(arg1);
        }

        @Override
        public void destroyItem(View arg0, int arg1, Object arg2) {
            //将每个图片在ViewPager里释放掉
            ((ViewPager) arg0).removeView((View) arg2);
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            //view 和 Object 是不是一个对象
            return arg0 == arg1;
        }
    }
    
     @Override
    protected void onStart() {
        //用一个定时器  来完成图片切换
        scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        //通过定时器 来完成 每1秒钟切换一个图片,经过指定的时间后,执行所指定的任务
        //command 所要执行的任务
        //initialDelay 第一次启动时 延迟启动时间
        //period  每间隔多次时间来重新启动任务
        //unit 时间单位
        scheduledExecutorService.scheduleAtFixedRate(new SwitchTask (), 500, 10000, TimeUnit.MILLISECONDS);
        super.onStart();
    }

    @Override
    protected void onStop() {
        //停止图片切换
        scheduledExecutorService.shutdown();
        super.onStop();
    }

    //用来完成图片切换的任务
    private class SwitchTask implements Runnable {

        public void run() {
            //改变当前页面
            currentItem= (currentItem+ 1) % imageViews.size();    //实现循环播放的效果,所以要取模
            //实现图片切换 可以用handler 在这里用一个更简单的方式 
           // handler.obtainMessage().sendToTarget();
            runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //设定viewPager当前页面
                        vp.setCurrentItem(currentItem);
                    }
                });
        }
    }
  }


你可能感兴趣的:(简单的图片自动切换效果实现)