Android的数据存储与IO - 手势


Android的数据存储与IO - 手势

关于手势的知识,我是第一次接触,是Android提供的另类的IO

可以进行手势检测、通过指定手势完成相应的动作、可以自行添加手势到手势库,也可以识别手势

下面是一个实例:通过手势缩放图片

创建项目:GestureZoom

运行项目效果如下:

Activity文件:GestureZoom

  1. package wwj.gesturezoom;  
  2.   
  3. import android.app.Activity;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.BitmapFactory;  
  6. import android.graphics.Matrix;  
  7. import android.graphics.drawable.BitmapDrawable;  
  8. import android.os.Bundle;  
  9. import android.view.GestureDetector;  
  10. import android.view.GestureDetector.OnGestureListener;  
  11. import android.view.MotionEvent;  
  12. import android.widget.ImageView;  
  13.   
  14. public class GestureZoom extends Activity implements OnGestureListener {  
  15.       
  16.     //定义手势检测器实例   
  17.     GestureDetector detector;  
  18.     ImageView imageView;  
  19.     //初始图片资源   
  20.     Bitmap bitmap;  
  21.     //定义图片的宽、高   
  22.     int width, height;  
  23.     //记录当前的缩放比   
  24.     float currentScale = 1;  
  25.     //控制图片缩放的Matrix对象   
  26.     Matrix matrix;  
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.main);  
  31.         //创建手势检测器   
  32.         detector = new GestureDetector(this);  
  33.         imageView = (ImageView)findViewById(R.id.show);  
  34.         matrix = new Matrix();  
  35.         //获取被缩放的源图片   
  36.         bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.flower);  
  37.         //获得位图宽   
  38.         width = bitmap.getWidth();  
  39.         //获得位图高   
  40.         height = bitmap.getHeight();  
  41.         //设置ImageView初始化时显示的图片   
  42.         imageView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.flower));  
  43.     }  
  44.     @Override  
  45.     public boolean onTouchEvent(MotionEvent event) {  
  46.         // TODO Auto-generated method stub   
  47.         //将该Acitivity上触碰事件交给GestureDetector处理   
  48.         return detector.onTouchEvent(event);  
  49.     }  
  50.     public boolean onDown(MotionEvent e) {  
  51.         // TODO Auto-generated method stub   
  52.         return false;  
  53.     }  
  54.     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
  55.             float velocityY) {  
  56.         // TODO Auto-generated method stub   
  57.         velocityX = velocityX > 4000 ? 4000 : velocityX;  
  58.         velocityY = velocityY < -4000 ? -4000 : velocityY;  
  59.         //根据手势的速度来计算缩放比,如果velocity > 0, 放大图像,否则缩小图像   
  60.         currentScale += currentScale * velocityX / 4000.0f;  
  61.         //保证currentScale不会等于0   
  62.         currentScale = currentScale > 0.01 ? currentScale : 0.01f;  
  63.         //重置Matrix   
  64.         matrix.reset();  
  65.         //缩放Matrix   
  66.         matrix.setScale(currentScale, currentScale, 160200);  
  67.         BitmapDrawable tmp = (BitmapDrawable) imageView.getDrawable();  
  68.         //如果图片还未回收,先强制回收该图片   
  69.         if(!tmp.getBitmap().isRecycled()){  
  70.             tmp.getBitmap().recycle();  
  71.         }  
  72.         //根据原始位图和Matrix创建新图片   
  73.         Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 00, width, height, matrix, true);  
  74.         //显示新的位图   
  75.         imageView.setImageBitmap(bitmap2);  
  76.         return true;  
  77.     }  
  78.     public void onLongPress(MotionEvent e) {  
  79.         // TODO Auto-generated method stub   
  80.           
  81.     }  
  82.     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,  
  83.             float distanceY) {  
  84.         // TODO Auto-generated method stub   
  85.         return false;  
  86.     }  
  87.     public void onShowPress(MotionEvent e) {  
  88.         // TODO Auto-generated method stub   
  89.           
  90.     }  
  91.     public boolean onSingleTapUp(MotionEvent e) {  
  92.         // TODO Auto-generated method stub   
  93.         return false;  
  94.     }  
  95.       
  96. }  
更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11

相关内容