新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Android應(yīng)用開發(fā) ScaleGestureDetector(縮放手勢

        Android應(yīng)用開發(fā) ScaleGestureDetector(縮放手勢

        作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

        一、概述

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

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

        二、要求

        利用ScaleGestureDetector這個(gè)類實(shí)現(xiàn)圖片縮放。

        三、實(shí)現(xiàn)

        新建工程MyScale,修改main.xml文件,在里面添加一個(gè)Button和一個(gè)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文件,主要是實(shí)現(xiàn)按鈕的監(jiān)聽和定義一個(gè)類實(shí)現(xiàn)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);

        //按鈕監(jiān)聽

        mButton.setOnClickListener(new View.OnClickListener()

        {

        @Override

        public void onClick(View v)

        {

        // TODO Auto-generated method stub

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

        //鎖定整個(gè)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);

        //鎖定整個(gè)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才會(huì)進(jìn)入onScale()這個(gè)函數(shù)

        return true;

        }

        @Override

        public void onScaleEnd(ScaleGestureDetector detector)

        {

        // TODO Auto-generated method stub

        }

        }

        }



        關(guān)鍵詞:

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 根河市| 怀宁县| 亳州市| 通城县| 中江县| 乌兰县| 江陵县| 云龙县| 白沙| 茂名市| 华池县| 台安县| 江山市| 乳山市| 宁蒗| 嘉峪关市| 无极县| 深泽县| 德惠市| 喀喇沁旗| 德化县| 遵化市| 黎平县| 吴堡县| 日照市| 平遥县| 隆安县| 永泰县| 长武县| 顺昌县| 旺苍县| 买车| 景德镇市| 如东县| 巴东县| 沾益县| 肥东县| 江陵县| 嘉祥县| 扶风县| 江孜县|