Android中使用手勢Gesture實現圖片放縮
在本實例中,通過手指滑動來實現圖片放縮,用戶只要在圖片上隨意“揮動手指”,圖片就可被放縮,從左向右揮動時,圖片被放大,當從右向左揮動時圖片被縮小:揮動速度越快,縮放比越大。代碼如下:</span>
import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.widget.ImageView;public class MainActivity extends Activity implements OnGestureListener { // 定義手勢檢測器實例 private GestureDetector detector; // 定義ImageView實例 private ImageView imageView; // 定義初始的圖片資源 private Bitmap bitmap; // 定義圖片的寬、高 private int width, height; // 記錄當前的縮放比 private float currentScale = 1; // 控制圖片縮放的Matrix對象 private Matrix matrix;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 創建手勢檢測器 detector = new GestureDetector(this); imageView = (ImageView) findViewById(R.id.activity_main_image); matrix = new Matrix(); // 獲取被放縮的源圖片 bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.image5); // 獲得位圖寬 width = bitmap.getWidth(); // 獲得位圖高 height = bitmap.getHeight(); // 設置ImageVIew初始化時顯示的圖片 imageView.setImageBitmap(BitmapFactory.decodeResource( this.getResources(), R.drawable.image5)); } @Override public boolean onTouchEvent(MotionEvent event) { // 將該Activity上的觸碰事件交給GestureDetector處理 return detector.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { velocityX = velocityX > 4000 ? 4000 : velocityX; velocityX = velocityX < -4000 ? -4000 : velocityX; // 根據手勢的速度來計算縮放比,如果velocityX>0,放大圖像,否則縮小圖像 currentScale += currentScale * velocityX / 4000.0f; // 保證currentScale不會等于0 currentScale = currentScale > 0.01 ? currentScale : 0.01f; // 重置Matrix matrix.reset(); // 縮放Matrix matrix.setScale(currentScale, currentScale, 160, 200); BitmapDrawable tmp = (BitmapDrawable) imageView.getDrawable(); // 如果圖片還未回收,先強制回收該圖片 if (!tmp.getBitmap().isRecycled()) { tmp.getBitmap().recycle(); } // 根據原始位圖和Matrix創建新圖片 Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); // 顯示新的位圖 imageView.setImageBitmap(bitmap2); return false; } @Override public void onLongPress(MotionEvent e) { } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return false; }
}</pre></span>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!