今天寫了個onDoubleTap事件的處理方法,雙擊螢幕事件的放大縮小的程式,雙擊螢幕圖片放大,再雙擊螢幕圖片縮小到原來的效果。 請看的效果!
原圖: 雙擊螢幕放大後的效果:
現把代碼貼出來:
一、MainActivty.java類中的代碼:
package com.cn.android;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.GestureDetector;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.GestureDetector.OnGestureListener;public class mainActivity extends Activity implements OnGestureListener{ private ImageShowView mImageShowView = null; private GestureDetector gestureScanner; private double Scale = 1.0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mImageShowView = new ImageShowView(this); setContentView(mImageShowView); gestureScanner = new GestureDetector(this); gestureScanner.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener(){ @Override public boolean onDoubleTap(MotionEvent e) { // TODO Auto-generated method stub // 雙擊時產生一次 if(Scale == 1.0){ Scale = Scale + 0.5; mImageShowView.setScale(Scale); } else if(Scale == 1.5){ Scale = Scale - 0.5; mImageShowView.setScale(Scale); } Log.v("daming", "onDoubleTap"); return true; } @Override public boolean onDoubleTapEvent(MotionEvent e) { // TODO Auto-generated method stub // 雙擊時產生兩次 Log.v("daming", "onDoubleTapEvent"); return false; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { //短快的點擊算一次單擊 Log.v("daming", "onSingleTapConfirmed"); return false; } }); } @Override public boolean onTouchEvent(MotionEvent me) { return gestureScanner.onTouchEvent(me); } @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return false; } }
二、ImageShowView.java中的代碼:
package com.cn.android;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.view.KeyEvent;import android.view.View;public class ImageShowView extends View implements Runnable{ Bitmap mBitmap = null; int mBitmapWidth = 0;//定義圖片的寬 int mBitmapHeight = 0;//定義圖片的高 private double Scale = 1.0; Matrix mMatrix = new Matrix(); public ImageShowView(Context context) { super(context); mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.image1)).getBitmap(); mBitmapWidth = mBitmap.getWidth(); mBitmapHeight = mBitmap.getHeight(); //開啟線程 new Thread(this).start(); } public void setScale(double scale){ this.Scale = scale; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mMatrix.reset(); mMatrix.postScale((float)Scale, (float)Scale);//設定縮放 Bitmap mBitmap2 = Bitmap.createBitmap(mBitmap,0,0,mBitmapWidth,mBitmapHeight,mMatrix,true); //繪製旋轉之後的映像 ImageShowView.drawImage(canvas,mBitmap2,(320-mBitmapWidth)/2,10); mBitmap2 = null; } @Override public void run() { while(!Thread.currentThread().isInterrupted()){ try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } postInvalidate(); } } private static void drawImage(Canvas canvas, Bitmap bitmap, int x, int y) { // TODO Auto-generated method stub canvas.drawBitmap(bitmap, x, y, null); }}
說明:以上就是我的全部代碼,項目中的圖片就不上傳了,大家可以自己傳個圖片上去就可以了,有需要完整代碼的可以留郵箱,大家有任何問題,可以給我留言,我看到就回複!大家有好的意見可以提出來,共同學習,共同進步!