Android之ScaleGestureDetector(缩放手势检测)
来源:互联网 发布:君将哀而生之乎 编辑:程序博客网 时间:2024/06/02 07:31
一、概述
ScaleGestureDetector这个类是专门用来检测两个手指在屏幕上做缩放的手势用的,最简单的应用就是用来缩放图片或者缩放网页。
二、要求
利用ScaleGestureDetector这个类实现图片缩放。
三、实现
新建工程MyScale,修改main.xml文件,在里面添加一个Button和一个SurfaceView,如下:
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" > 6 7 <Button 8 android:id="@+id/button" 9 android:layout_width="fill_parent"10 android:layout_height="wrap_content"11 android:text="显示图片"12 />13 14 <SurfaceView 15 android:id="@+id/surfaceview"16 android:layout_width="fill_parent"17 android:layout_height="fill_parent"18 />19 20 </LinearLayout>
修改MyScaleActivity.java文件,主要是实现按钮的监听和定义一个类实现ScaleGestureDetector.OnScaleGestureListener接口:
1 package com.nan.scale; 2 3 import android.app.Activity; 4 import android.graphics.Bitmap; 5 import android.graphics.BitmapFactory; 6 import android.graphics.Canvas; 7 import android.graphics.Color; 8 import android.graphics.Matrix; 9 import android.graphics.Rect; 10 import android.os.Bundle; 11 import android.view.MotionEvent; 12 import android.view.ScaleGestureDetector; 13 import android.view.SurfaceHolder; 14 import android.view.SurfaceView; 15 import android.view.View; 16 import android.widget.Button; 17 18 19 20 public class MyScaleActivity extends Activity 21 { 22 private Button mButton = null; 23 private SurfaceView mSurfaceView = null; 24 private SurfaceHolder mSurfaceHolder = null; 25 private ScaleGestureDetector mScaleGestureDetector = null; 26 private Bitmap mBitmap = null; 27 28 /** Called when the activity is first created. */ 29 @Override 30 public void onCreate(Bundle savedInstanceState) 31 { 32 super.onCreate(savedInstanceState); 33 setContentView(R.layout.main); 34 35 mSurfaceView = (SurfaceView)this.findViewById(R.id.surfaceview); 36 mSurfaceHolder = mSurfaceView.getHolder(); 37 mScaleGestureDetector = new ScaleGestureDetector(this,new ScaleGestureListener()); 38 mButton = (Button)this.findViewById(R.id.button); 39 //按钮监听 40 mButton.setOnClickListener(new View.OnClickListener() 41 { 42 43 @Override 44 public void onClick(View v) 45 { 46 // TODO Auto-generated method stub 47 mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.mmm); 48 //锁定整个SurfaceView 49 Canvas mCanvas = mSurfaceHolder.lockCanvas(); 50 //画图 51 mCanvas.drawBitmap(mBitmap, 0f, 0f, null); 52 //绘制完成,提交修改 53 mSurfaceHolder.unlockCanvasAndPost(mCanvas); 54 //重新锁一次 55 mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0)); 56 mSurfaceHolder.unlockCanvasAndPost(mCanvas); 57 } 58 }); 59 60 } 61 62 @Override 63 public boolean onTouchEvent(MotionEvent event) 64 { 65 //返回给ScaleGestureDetector来处理 66 return mScaleGestureDetector.onTouchEvent(event); 67 } 68 69 70 public class ScaleGestureListener implements ScaleGestureDetector.OnScaleGestureListener 71 { 72 73 @Override 74 public boolean onScale(ScaleGestureDetector detector) 75 { 76 // TODO Auto-generated method stub 77 78 Matrix mMatrix = new Matrix(); 79 //缩放比例 80 float scale = detector.getScaleFactor()/3; 81 mMatrix.setScale(scale, scale); 82 83 //锁定整个SurfaceView 84 Canvas mCanvas = mSurfaceHolder.lockCanvas(); 85 //清屏 86 mCanvas.drawColor(Color.BLACK); 87 //画缩放后的图 88 mCanvas.drawBitmap(mBitmap, mMatrix, null); 89 //绘制完成,提交修改 90 mSurfaceHolder.unlockCanvasAndPost(mCanvas); 91 //重新锁一次 92 mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0)); 93 mSurfaceHolder.unlockCanvasAndPost(mCanvas); 94 95 return false; 96 } 97 98 @Override 99 public boolean onScaleBegin(ScaleGestureDetector detector) 100 {101 // TODO Auto-generated method stub 102 //一定要返回true才会进入onScale()这个函数103 return true;104 }105 106 @Override107 public void onScaleEnd(ScaleGestureDetector detector) 108 {109 // TODO Auto-generated method stub110 111 }112 113 }114 115 }
运行该程序:
点击一下“显示图片”按钮:
然后用两个手指缩小图片:
放大图片:
好了。可以发现,每次一开始缩放图片的时候都有一个突变,如果用来做应用的话这个程序还需要改善。
0 0
- Android之ScaleGestureDetector(缩放手势检测)
- Android之ScaleGestureDetector(缩放手势检测)
- Android之ScaleGestureDetector(缩放手势检测)
- Android之ScaleGestureDetector(缩放手势检测)
- Android:ScaleGestureDetector 缩放手势检测
- ScaleGestureDetector(缩放手势检测)
- Android图片处理-----ScaleGestureDetector(缩放手势检测)
- ScaleGestureDetector之手势缩放
- ScaleGestureDetector之手势缩放
- Android ScaleGestureDetector缩放手势识别
- Android应用开发基础篇(16)-----ScaleGestureDetector(缩放手势检测)
- Android应用开发基础篇(16)-----ScaleGestureDetector(缩放手势检测)
- Android应用开发基础篇(16)-----ScaleGestureDetector(缩放手势检测)
- ScaleGestureDetector SimpleOnScaleGestureListener缩放手势识别器
- Android通过ScaleGestureDetector实现图片缩放
- Android之实现手势缩放的ImageView
- Android之实现手势缩放ImageView
- Android之实现手势缩放ImageView
- Squid代理服务3.1版本的配置和使用简介
- 如何获取listview的内容高度
- windows系统下SVN服务器的搭建_2014年1月2日
- iOS中如何创建一个滑出式导航面板(1)
- C++ hashtable实现
- Android之ScaleGestureDetector(缩放手势检测)
- iOS中如何创建一个滑出式导航面板(2)
- Activity生命周期总结
- 如何改善 MySQL 数据装载操作效率的方法
- new String("abc")创建了几个对象
- js之分割取字符串
- vim常用命令
- C++箴言:声明为非成员函数的时机(转)
- 线性变换