安卓31:AndroidStudio—ImageSwitcher 图片切换器组件

可以在java文件中设置切换动画
设置淡出动画
setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,动画资源));

设置进入动画
setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,动画资源));

设置完动画后需要指定视图工厂
setFactory()方法,以匿名内部类为参数,需要重写makeview()方法
在视图转换器中创建一个视图,为ImageSwicher设置Factory,用来为ImageSwicher制造ImageView,定义的imageView图像在这个视图工厂里运行.
设置监听器setOnClickListener

xml文件

<ImageSwitcher
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/>

java文件

public class MainActivity extends AppCompatActivity {
    private int[]arrayPictures =new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05,R.drawable.img06,R.drawable.img07,R.drawable.img08,R.drawable.img09};//声明并初始化一个保存要显示图像ID的数组
    private ImageSwitcher imageSwitcher;// 声明一个图像切换器对象
    private int pictutureIndex;//要显示的图片在图片数组中的Index
    private float touchDownX;  //左右滑动时手指按下的X坐标
    private float touchUpX;  //左右滑动时手指按下的X坐标
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
        imageSwitcher=findViewById(R.id.image);
        //为ImageSwicher设置Factory,用来为ImageSwicher制造ImageView
        imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                ImageView imageView=new ImageView(MainActivity.this);// 实例化一个ImageView类的对象
                imageView.setImageResource(arrayPictures[pictutureIndex]);//根据id加载默认显示图片
                return imageView;
            }
        });
        imageSwitcher.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_DOWN) {
                    touchDownX = event.getX();  //取得左右滑动时手指按下的X坐标
                    return true;
                }else if(event.getAction()==MotionEvent.ACTION_UP){
                    touchUpX= event.getX(); //取得左右滑动时手指松开的X坐标
                    //手指从左往右滑动,看下一张
                    if(touchUpX-touchDownX>100){
                        pictutureIndex=pictutureIndex==0?arrayPictures.length-1:pictutureIndex-1;//如果图片是第一章图片,从左往右滑动就是最后一张图片,如果不是,索引往前减1
                        //设置图片切换的动画
                        imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_in_left));
                        imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_out_right));
                        //设置当前要看的图片
                        imageSwitcher.setImageResource(arrayPictures[pictutureIndex]);
                        //从右往左,看上一张
                    }else if (touchDownX - touchUpX > 100) {
                        //取得当前要看的图片index
                        pictutureIndex = pictutureIndex == arrayPictures.length - 1 ? 0 : pictutureIndex + 1;//如果图片是最后一张,从右往左滑动就是最后一张图片,如果不是最后一张,右往左滑就是索引往后+1
                        //设置切换动画
                        imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_out_left));
                        imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_in_right));
                        //设置要看的图片
                        imageSwitcher.setImageResource(arrayPictures[pictutureIndex]);
                    }
                    return true;
                }
                return false;
            }
        });
    }
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值