下面的例子是用手势来缩放图片,手指往右划是放大,往左是缩小

下面效果在手机模拟器上呈现的只能是鼠标光标的划动了


package WangLi.IO.GestureZoom;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.GestureDetector;import android.view.GestureDetector.OnGestureListener;import android.view.MotionEvent;import android.widget.ImageView;public class GestureZoom extends Activity implements OnGestureListener{GestureDetector detector;ImageView imageView;//初始的图片资源Bitmap bitmap;//定义图片的宽,高int width,height;//记录当前的缩放比float currentScale = 1;//控制图片缩放的Matrix对象Matrix matrix;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        //创建手势检测器        detector = new GestureDetector(this);        imageView = (ImageView)findViewById(R.id.show);        matrix = new Matrix();        //获取被缩放的源图片        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.hotel);        //获得位图宽        width = bitmap.getWidth();        //获得位图高        height = bitmap.getHeight();        //设置ImageView初始化时显示的图片        imageView.setImageBitmap(BitmapFactory.decodeResource(        getResources(), R.drawable.hotel));    }    @Override    public boolean onTouchEvent(MotionEvent me)    {    //将Activity上的触碰事件交给GestureDetector处理    return detector.onTouchEvent(me);    }    @Overridepublic boolean onDown(MotionEvent arg0) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {// TODO Auto-generated method stubvelocityX = velocityX > 4000 ? 4000 : velocityX;velocityX = velocityX < -4000 ? -4000 : velocityX;//根据手势的速度来计算缩放比,如果velocity > 0,放大图像,否则缩小图像currentScale += currentScale * velocityX / 4000.0f;//保证currentScale不会等于0currentScale = currentScale > 0.01 ? currentScale : 0.01f;//重置Matrixmatrix.reset();//缩放Matrixmatrix.setScale(currentScale, currentScale ,160, 200);BitmapDrawable tmp = (BitmapDrawable)imageView.getDrawable();//如果图片还未回收,先强制回收该图片if(!tmp.getBitmap().isRecycled()){tmp.getBitmap().recycle();}//根据原始位图和Matrix创建新图片Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix,true);imageView.setImageBitmap(bitmap2);return false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}}


更多相关文章

  1. 关于android获得图片的总结
  2. Android(安卓)6种快速开发框架
  3. 关于Android加载图片时的OOM的一些解决方法和优化
  4. Android、web中的图片和语音的加密
  5. Android(安卓)ListView 图片异步加载和图片内存缓存
  6. Android(安卓)缓存浅谈(一) LruCache
  7. Android播放多张图片形成的一个动画示例
  8. Android(安卓)- 分享内容 - 接收其他APP的内容
  9. android 视频和图片切换并进行自动轮播

随机推荐

  1. Android(安卓)ObjectAnimator基础用法
  2. Android(安卓)向服务器发送get请求乱码问
  3. 我拆了个轮子--ANDROID WHEEL的实现(二)
  4. Android(安卓)WebView 总结 —— 使用HTM
  5. 解决S5pv210 adb push u-boot.bin /syste
  6. 【转】备份:Android(安卓)常用 mimeType
  7. Android中bool的使用
  8. Volley详解(一)——基本构架
  9. Android(安卓)Monkeyrunner Test
  10. 【Android】Fragment