新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Android應用開發 ScaleGestureDetector(縮放手勢

        Android應用開發 ScaleGestureDetector(縮放手勢

        作者: 時間:2016-09-12 來源:網絡 收藏

        一、概述

        本文引用地址:http://www.104case.com/article/201609/305037.htm

        ScaleGestureDetector這個類是專門用來檢測兩個手指在屏幕上做縮放的手勢用的,最簡單的應用就是用來縮放圖片或者縮放網頁。

        二、要求

        利用ScaleGestureDetector這個類實現圖片縮放。

        三、實現

        新建工程MyScale,修改main.xml文件,在里面添加一個Button和一個SurfaceView,如下:

        android:layout_width=fill_parent

        android:layout_height=fill_parent

        android:orientation=vertical >

        android:id=@+id/button

        android:layout_width=fill_parent

        android:layout_height=wrap_content

        android:text=顯示圖片

        />

        android:id=@+id/surfaceview

        android:layout_width=fill_parent

        android:layout_height=fill_parent

        />

        修改MyScaleActivity.java文件,主要是實現按鈕的監聽和定義一個類實現ScaleGestureDetector.OnScaleGestureListener接口:

        package com.nan.scale;

        import android.app.Activity;

        import android.graphics.Bitmap;

        import android.graphics.BitmapFactory;

        import android.graphics.Canvas;

        import android.graphics.Color;

        import android.graphics.Matrix;

        import android.graphics.Rect;

        import android.os.Bundle;

        import android.view.MotionEvent;

        import android.view.ScaleGestureDetector;

        import android.view.SurfaceHolder;

        import android.view.SurfaceView;

        import android.view.View;

        import android.widget.Button;

        public class MyScaleActivity extends Activity

        {

        private Button mButton = null;

        private SurfaceView mSurfaceView = null;

        private SurfaceHolder mSurfaceHolder = null;

        private ScaleGestureDetector mScaleGestureDetector = null;

        private Bitmap mBitmap = null;

        @Override

        public void onCreate(Bundle savedInstanceState)

        {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mSurfaceView = (SurfaceView)this.findViewById(R.id.surfaceview);

        mSurfaceHolder = mSurfaceView.getHolder();

        mScaleGestureDetector = new ScaleGestureDetector(this,new ScaleGestureListener());

        mButton = (Button)this.findViewById(R.id.button);

        //按鈕監聽

        mButton.setOnClickListener(new View.OnClickListener()

        {

        @Override

        public void onClick(View v)

        {

        // TODO Auto-generated method stub

        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.mmm);

        //鎖定整個SurfaceView

        Canvas mCanvas = mSurfaceHolder.lockCanvas();

        //畫圖

        mCanvas.drawBitmap(mBitmap, 0f, 0f, null);

        //繪制完成,提交修改

        mSurfaceHolder.unlockCanvasAndPost(mCanvas);

        //重新鎖一次

        mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));

        mSurfaceHolder.unlockCanvasAndPost(mCanvas);

        }

        });

        }

        @Override

        public boolean onTouchEvent(MotionEvent event)

        {

        //返回給ScaleGestureDetector來處理

        return mScaleGestureDetector.onTouchEvent(event);

        }

        public class ScaleGestureListener implements ScaleGestureDetector.OnScaleGestureListener

        {

        @Override

        public boolean onScale(ScaleGestureDetector detector)

        {

        // TODO Auto-generated method stub

        Matrix mMatrix = new Matrix();

        //縮放比例

        float scale = detector.getScaleFactor()/3;

        mMatrix.setScale(scale, scale);

        //鎖定整個SurfaceView

        Canvas mCanvas = mSurfaceHolder.lockCanvas();

        //清屏

        mCanvas.drawColor(Color.BLACK);

        //畫縮放后的圖

        mCanvas.drawBitmap(mBitmap, mMatrix, null);

        //繪制完成,提交修改

        mSurfaceHolder.unlockCanvasAndPost(mCanvas);

        //重新鎖一次

        mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));

        mSurfaceHolder.unlockCanvasAndPost(mCanvas);

        return false;

        }

        @Override

        public boolean onScaleBegin(ScaleGestureDetector detector)

        {

        // TODO Auto-generated method stub

        //一定要返回true才會進入onScale()這個函數

        return true;

        }

        @Override

        public void onScaleEnd(ScaleGestureDetector detector)

        {

        // TODO Auto-generated method stub

        }

        }

        }



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 连山| 六安市| 开阳县| 榆社县| 郴州市| 大同县| 大足县| 新宾| 贞丰县| 饶阳县| 沁水县| 尉氏县| 墨竹工卡县| 固安县| 曲沃县| 河北区| 邢台县| 张北县| 九龙城区| 碌曲县| 昂仁县| 广丰县| 建湖县| 定兴县| 永兴县| 界首市| 博湖县| 乐昌市| 静海县| 惠东县| 阿拉尔市| 麻城市| 轮台县| 敦化市| 巧家县| 东乌| 板桥市| 霞浦县| 郧西县| 阳山县| 永登县|