2025-05-24

 

今天寫瞭個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學習歷程

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *