今天寫瞭個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);
}
}
說明:以上就是我的全部代碼,項目中的圖片就不上傳瞭,大傢可以自己傳個圖片上去就可以瞭,有需要完整代碼的可以留郵箱,大傢有任何問題,可以給我留言,我看到就回復!大傢有好的意見可以提出來,共同學習,共同進步!
摘自 大明zeroson的android學習歷程