android开发之滑动手势翻图 滑动手势监听

原博:http://blog.csdn.net/zzy916853616/article/details/6525648

====================================================================================================================================       今晚就再整理点有用的东西,这是关于手势滑动的例子:虽然网上也有,但是我还是整理了下,希望对读者有帮助:

下面贴出代码:

[java]  view plain copy
  1. package android.apps;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import android.app.Activity;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9. import android.graphics.Bitmap;  
  10. import android.graphics.BitmapFactory;  
  11. import android.os.Bundle;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.widget.AdapterView;  
  15. import android.widget.AdapterView.OnItemClickListener;  
  16. import android.widget.BaseAdapter;  
  17.   
  18. import android.widget.GridView;  
  19.   
  20. import android.widget.ImageView;  
  21.   
  22. public class GridViewTest extends Activity {  
  23.     private File[] files;  
  24.     public static List<String> pathsrcs;  
  25.     public static int ImagePositions;  
  26.   
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.sdcard);  
  31.         GridView gridview = (GridView) findViewById(R.id.sdcard);  
  32. //      File f = android.os.Environment.getExternalStorageDirectory();  
  33.         files = new File("/sdcard/").listFiles();  
  34.         pathsrcs = new ArrayList<String>();  
  35.   
  36.         for (File file : files) {  
  37.             String path = file.getPath();  
  38.             // String path=file.getAbsolutePath();  
  39.             if (validate(path)) {  
  40.                 pathsrcs.add(path);  
  41.             }  
  42.   
  43.         }  
  44.         gridview.setAdapter(new ImageAdapter(this));  
  45.         gridview.setOnItemClickListener(new gridviewItemClick());  
  46.     }  
  47.   
  48.       
  49.       
  50.     class gridviewItemClick implements OnItemClickListener {  
  51.         @Override  
  52.         public void onItemClick(AdapterView<?> parent, View v, int position,  
  53.                 long id) {  
  54.             //点击操作  
  55.             Intent intent = new Intent();  
  56.             ImagePositions=position;//图片的位置  
  57.             intent.setClass(GridViewTest.this, ShowImage.class);  
  58.             startActivity(intent);  
  59.         }  
  60.   
  61.     }  
  62.   
  63.     class ImageAdapter extends BaseAdapter {  
  64.         private Context mContext;  
  65.   
  66.         public ImageAdapter(Context c) {  
  67.             mContext = c;  
  68.         }  
  69.   
  70.         public int getCount() {  
  71.             return pathsrcs.size();  
  72.         }  
  73.   
  74.         public Object getItem(int position) {  
  75.             return null;  
  76.         }  
  77.   
  78.         public long getItemId(int position) {  
  79.             return 0;  
  80.             // return position;  
  81.         }  
  82.   
  83.         public View getView(int position, View convertView, ViewGroup parent) {  
  84.   
  85.             ImageView imageView;  
  86.             if (convertView == null) { // if it's not recycled, initialize some  
  87.                                         // attributes  
  88.                 imageView = new ImageView(mContext);  
  89.                 imageView.setLayoutParams(new GridView.LayoutParams(8585));//控制图片大小  
  90.                 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);  
  91.                 imageView.setPadding(8888);  
  92.             } else {  
  93.                 imageView = (ImageView) convertView;  
  94.             }  
  95.             String path = pathsrcs.get(position);  
  96.             File file = new File(path);  
  97.             if (file.exists()) {  
  98.                 Bitmap bitmap = BitmapFactory.decodeFile(path);  
  99.                 imageView.setImageBitmap(bitmap);  
  100.             }  
  101.             return imageView;  
  102.         }  
  103.     }  
  104.     /**@判断是否存在该类型的图片 
  105.      * @param fileName 
  106.      * @return boolean 
  107.      */  
  108.     private boolean validate(String fileName) {  
  109.         int idx = fileName.indexOf(".");  
  110.         String subfix = fileName.substring(idx + 1);  
  111.         if (fileName.equals("")) {  
  112.             return false;  
  113.         }  
  114.         // subfix.equals()||subfix.equals(".png")||subfix.equals(".jpeg")  
  115.         if ("jpg".equals(subfix)||"png".equals(subfix)||"gif".equals(subfix)) {  
  116.             return true;  
  117.         } else {  
  118.             return false;  
  119.         }  
  120.     }  
  121. }  


手势类

[java]  view plain copy
  1. package android.apps;  
  2.   
  3. import android.app.Activity;  
  4. import android.net.Uri;  
  5. import android.os.Bundle;  
  6. import android.view.GestureDetector;  
  7. import android.view.GestureDetector.OnGestureListener;  
  8. import android.view.MotionEvent;  
  9. import android.view.View;  
  10. import android.view.View.OnTouchListener;  
  11. import android.widget.ImageView;  
  12. import android.widget.Toast;  
  13.   
  14. public class ShowImage extends Activity implements OnTouchListener,OnGestureListener{  
  15.     private static ImageView image = null;  
  16.     private static final int FLING_MIN_DISTANCE = 120;//移动最小距离  
  17.     private static final int FLING_MIN_VELOCITY = 200;//移动最大速度  
  18.     private int position;  
  19.     @Override  
  20.     protected void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         image = (ImageView)findViewById(R.id.show);  
  24.         //pathsrcs-->存放图片路径的数组       ImagePositions-->选择的第几张图片  
  25.         String path = GridViewTest.pathsrcs.get(GridViewTest.ImagePositions);  
  26.         //设置图片显示路径  
  27.         image.setImageURI(Uri.parse(path));  
  28.         //设置Touch监听  
  29.         image.setOnTouchListener(this);  
  30.         //允许长按  
  31.         image.setLongClickable(true);  
  32.     }  
  33.     //构建手势探测器  
  34.     GestureDetector mygesture = new GestureDetector(this);  
  35.     @Override  
  36.     public boolean onTouch(View v, MotionEvent event) {  
  37.         return mygesture.onTouchEvent(event);  
  38.     }  
  39.       
  40.     //显示下一张图片  
  41.     public void showNextImage(){  
  42.         position=++GridViewTest.ImagePositions;  
  43.         if(position>=GridViewTest.pathsrcs.size()){  
  44.             Toast.makeText(ShowImage.this"已到最后一张图片", Toast.LENGTH_SHORT).show();  
  45.             GridViewTest.ImagePositions=GridViewTest.pathsrcs.size()-1;  
  46.         }else{  
  47.             String path = GridViewTest.pathsrcs.get(position);  
  48.             image.setImageURI(Uri.parse(path));  
  49.         }  
  50.         System.out.println("positoon="+position);  
  51.     }  
  52.     //显示上一张图片  
  53.     public void showLastImage(){  
  54.         position=--GridViewTest.ImagePositions;  
  55.         if(position<0){  
  56.             Toast.makeText(ShowImage.this"已到第一张图片", Toast.LENGTH_SHORT).show();  
  57.             GridViewTest.ImagePositions=0;  
  58.         }else{  
  59.             String path = GridViewTest.pathsrcs.get(position);  
  60.             image.setImageURI(Uri.parse(path));  
  61.         }  
  62.     }  
  63.     /*用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,  
  64.      * 多个ACTION_MOVE, 1个ACTION_UP触发*/  
  65.     //主要方法  
  66.     @Override  
  67.     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
  68.             float velocityY) {  
  69.         // e1:第1个ACTION_DOWN MotionEvent   
  70.         // e2:最后一个ACTION_MOVE MotionEvent   
  71.         // velocityX:X轴上的移动速度(像素/秒)   
  72.         // velocityY:Y轴上的移动速度(像素/秒)   
  73.           
  74.         // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒   
  75.         //向有翻图片  
  76.         if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE      
  77.                      && Math.abs(velocityX) > FLING_MIN_VELOCITY) {      
  78.             showNextImage();  
  79.              }   
  80.         //向左翻图片  
  81.         if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE      
  82.                      && Math.abs(velocityX) > FLING_MIN_VELOCITY) {      
  83.             showLastImage();  
  84.         }      
  85.            return false;      
  86.     }  
  87.     //下面方法没用,但是这里必须实现  
  88.     /* 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发*/  
  89.     @Override  
  90.     public void onLongPress(MotionEvent e) {}  
  91.       
  92.     /* 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发*/  
  93.     @Override  
  94.     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {return false;}  
  95.       
  96.     /* 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发     
  97.       注意和onDown()的区别,强调的是没有松开或者拖动的状态    */  
  98.     @Override  
  99.     public void onShowPress(MotionEvent e) {}  
  100.       
  101.     /*用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发*/  
  102.     @Override  
  103.     public boolean onSingleTapUp(MotionEvent e) {return false;}  
  104.       
  105.     @Override  
  106.     public boolean onDown(MotionEvent e) {return false;}  
  107.       
  108. }  

希望对读者有帮助


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值