安卓例項:手勢操作
阿新 • • 發佈:2018-11-11
一.實現效果
當我們在螢幕上滑動時就能改變圖片(我用的軟體滑鼠錄不進去)
二.涉及知識點
1、線性佈局(LinearLayout)
2、影象檢視(ImageView)
3、單點觸控事件(MotionEvent)
三.實現步驟
1.佈局檔案
因為我們只是做滑動切換圖片,所以只需要一個簡單的佈局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </LinearLayout>
2.主介面類
public class gesture extends Activity { private GestureDetector detector;//手勢監測器 private int[] ImgIds;//圖片id陣列,將圖片id儲存起來方便使用 private int imgIndex;//圖片索引 private static final int IMG_COUNT=13;//圖片數量 private LinearLayout root; private final String TAG="net.hw.deom0505"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.shoushi); root=findViewById(R.id.root); ImgIds=new int[IMG_COUNT];放入數量 for (int i=0;i<IMG_COUNT;i++){ ImgIds[i]=getResources().getIdentifier("img"+(i+1),"mipmap","net.hw.deom0505");//儲存id } //手勢監測器,可以監測按下,長短距離滑動等 detector = new GestureDetector(this, new GestureDetector.OnGestureListener() { @Override public boolean onDown(MotionEvent e) { Log.i(TAG, "onDown: "); return false; } @Override public void onShowPress(MotionEvent e) { Log.i(TAG, "onShowPress: "); } @Override public boolean onSingleTapUp(MotionEvent e) { Log.i(TAG, "onSingleTapUp: "); return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.i(TAG, "onScroll: "); return false; } @Override public void onLongPress(MotionEvent e) { Log.i(TAG, "onLongPress: "); } @Override//onFling fling是扔,拋的意思,當手在螢幕上滑動是觸發的事件 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.i(TAG, "onFling: "); //監測左右滑動,當某個方向滑動超過20索引變化 if(e2.getX()<e1.getX()-20){ if (imgIndex<IMG_COUNT-1){ imgIndex++; }else { imgIndex=0; } }else if(e2.getX()>e1.getX()+20){ if (imgIndex>0){ imgIndex--; }else { imgIndex=IMG_COUNT-1; } } //將變化後的索引放入,來改變圖片 root.setBackgroundResource(ImgIds[imgIndex]); return false; } }); } @Override//要將觸控事件交接給滑動事件,讓滑動事件接受到 public boolean onTouchEvent(MotionEvent event){ return detector.onTouchEvent(event); } }