安卓觸控手勢事件實現圖片跟著手指移動和圖片縮放
阿新 • • 發佈:2018-11-19
效果如下:
佈局程式碼:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@mipmap/img1" android:orientation="vertical" tools:context=".MainActivity"> </LinearLayout>
主介面程式碼:
package com.example.beautyphtotos; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; import android.widget.LinearLayout; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener{ /** * 手勢偵測器 */ private GestureDetector detector; /** * 影象標識陣列 */ private int[]imgIds; /** * 影象索引,表示在陣列中的位置 */ private int imgIndex; /** * 圖片數量 */ private static final int IMG_COUNT=23; /** * 根佈局 */ private LinearLayout linearLayout; /** * 應用程式標記 */ private final String TAG="swith_belle_image"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //通過資源標識 linearLayout=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","com.example.beautyphtotos"); } //例項化手勢偵測器(引數1:上下文環境,引數2:手勢監聽器物件) detector=new GestureDetector(this,this); } /** * 將視窗觸控事件交給手勢偵測器處理 * */ public boolean onTouchEvent(MotionEvent event){ return detector.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { Toast.makeText(MainActivity.this,"溫馨提示:左右滑動可切換圖片",Toast.LENGTH_SHORT).show(); Log.d(TAG, "onDown"); return true; } @Override public void onShowPress(MotionEvent e) { Log.d(TAG, "onShowPress"); } @Override public boolean onSingleTapUp(MotionEvent e) { Log.d(TAG, "onSingleTapUp"); return true; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.d(TAG, "onDown"); return true; } @Override public void onLongPress(MotionEvent e) { Log.d(TAG, "onLongPress"); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Log.d(TAG, "onFling"); //手勢往左滑動10個畫素,圖片切換到下一張 if (e1.getX()-e2.getX()>=10){ //更改影象索引 if (imgIndex<IMG_COUNT-1){ imgIndex++; }else { imgIndex=0; } } //手勢向右滑動10個畫素,圖片切換上一張 if (e2.getX()-e1.getX()>=10){ //更新影象索引 if (imgIndex>0){ imgIndex--; }else { imgIndex=IMG_COUNT-1; } } //利用更改後的影象索引去設定根佈局的背景圖片 linearLayout.setBackgroundResource(imgIds[imgIndex]); //返回真事件處理到此完畢 return true; } }