参考博客地址:https://blog.csdn.net/yuliyige/article/details/12655895
代码:
相对布局管理器,里面添加动画ViewFlipper。创建动画文件。
单击红色灯泡 实现 方法:
- 第一步,让MainActivity 实现Gesturedector.OnGestureListener接口动画ViewFlipper flipper ,Ainmation[] animation =new Animation[4];
- 定义全局的手势检测器GestureDetector .
Detector =new GestureDetector(MainActivity.this,this);
- 将要显示的图片加载到 ViewFlipper 中。并且初始化动画。
定义图片资源ID 数组:images[]
ImageView imageview
Flipper.addView(imageview);
//初始化动画:
animation[0]=AnimationUtils.loadAnimation();//第一个参数 this第二个参数 动画资源。
4.在 onFling中通过 触摸事件的横坐标判断向左滑动,向右滑动。
5.boolean onTouchEvent(MotionEvent event) 返回 : detector.onTouchEvent(event);
Activity 的触摸检测 交给 detector 处理。
----------------------------------------------------------------------------------
package com.zengjx.androidbaseproject; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.ViewFlipper; import java.security.acl.LastOwnerException; /** * Created by zengjx on 2018/12/21. */ /** * 1. 第一步,让MainActivity 实现Gesturedector.OnGestureListener接口动画ViewFlipper flipper , * Ainmation[] animation =new Animation[4]; */ public class TouchChoosePictureActivity extends AppCompatActivity implements GestureDetector.OnGestureListener { private final String TAG="TouchChoose"; ViewFlipper viewFlipper;//循环滚动控件 GestureDetector detector;//手势检测 float distances=20; Animation[] animation = new Animation[4]; private int images[]={ 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, }; @Override protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle("TouchChoosePictureActivity"); setContentView(R.layout.touchchoosepicture); setTitle("照片查看器"); initView(); } public void initView(){ //2.定义手势检测器 detector =new GestureDetector(TouchChoosePictureActivity.this,this); viewFlipper=findViewById(R.id.viewfliper); //3.将要显示的图片显示在viewFlipper for(int i=0;i<8;i++){ ImageView imageView =new ImageView(this); imageView.setImageResource(images[i]); viewFlipper.addView(imageView); } //4. //设置动画方式 animation[0]= AnimationUtils.loadAnimation(this,R.anim.slide_in_left); animation[1]= AnimationUtils.loadAnimation(this,R.anim.slide_out_left); animation[2]= AnimationUtils.loadAnimation(this,R.anim.slide_in_right); animation[3]= AnimationUtils.loadAnimation(this,R.anim.slide_out_right); } //// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发 @Override public boolean onDown(MotionEvent motionEvent) { Log.i(TAG,"onDown"); return false; } //// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发 // 注意和onDown()的区别,强调的是没有松开或者拖动的状态 @Override public void onShowPress(MotionEvent motionEvent) { Log.i(TAG,"onShowPress"); } //// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发 @Override public boolean onSingleTapUp(MotionEvent motionEvent) { Log.i(TAG,"onSingleTapUp"); return false; } //// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发 @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { Log.i(TAG,"onScroll"); return false; } @Override public void onLongPress(MotionEvent motionEvent) { Log.i(TAG,"onLongPress"); } //// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发 @Override public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { Log.i(TAG,"onFling motionEvent x:"+motionEvent.getX()+"motionEvent X"+motionEvent1.getX()); // 右-----左 if((motionEvent.getX()-motionEvent1.getX())>=distances){ viewFlipper.setInAnimation(animation[2]);//right --in 设置切换View的进入动画 viewFlipper.setOutAnimation(animation[3]);// 设置切换View的退出动画 //显示前一张 图片 viewFlipper.showPrevious();//显示ViewFlipper里的上一个View }else{ viewFlipper.setInAnimation(animation[0]);//left --in viewFlipper.setOutAnimation(animation[1]);// left out //显示一张 图片 viewFlipper.showNext();// 显示ViewFlipper里的下一个View } return false; } //第5步 Activity 手势交给 GestureDetector 处理 @Override public boolean onTouchEvent(MotionEvent event) { return detector.onTouchEvent(event); } }
-------------------------------
ViewFlipper