原博:http://blog.csdn.net/zzy916853616/article/details/6525648
==================================================================================================================================== 今晚就再整理点有用的东西,这是关于手势滑动的例子:虽然网上也有,但是我还是整理了下,希望对读者有帮助:
下面贴出代码:
- package android.apps;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.content.Context;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.BaseAdapter;
- import android.widget.GridView;
- import android.widget.ImageView;
- public class GridViewTest extends Activity {
- private File[] files;
- public static List<String> pathsrcs;
- public static int ImagePositions;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.sdcard);
- GridView gridview = (GridView) findViewById(R.id.sdcard);
- // File f = android.os.Environment.getExternalStorageDirectory();
- files = new File("/sdcard/").listFiles();
- pathsrcs = new ArrayList<String>();
- for (File file : files) {
- String path = file.getPath();
- // String path=file.getAbsolutePath();
- if (validate(path)) {
- pathsrcs.add(path);
- }
- }
- gridview.setAdapter(new ImageAdapter(this));
- gridview.setOnItemClickListener(new gridviewItemClick());
- }
- class gridviewItemClick implements OnItemClickListener {
- @Override
- public void onItemClick(AdapterView<?> parent, View v, int position,
- long id) {
- //点击操作
- Intent intent = new Intent();
- ImagePositions=position;//图片的位置
- intent.setClass(GridViewTest.this, ShowImage.class);
- startActivity(intent);
- }
- }
- class ImageAdapter extends BaseAdapter {
- private Context mContext;
- public ImageAdapter(Context c) {
- mContext = c;
- }
- public int getCount() {
- return pathsrcs.size();
- }
- public Object getItem(int position) {
- return null;
- }
- public long getItemId(int position) {
- return 0;
- // return position;
- }
- public View getView(int position, View convertView, ViewGroup parent) {
- ImageView imageView;
- if (convertView == null) { // if it's not recycled, initialize some
- // attributes
- imageView = new ImageView(mContext);
- imageView.setLayoutParams(new GridView.LayoutParams(85, 85));//控制图片大小
- imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
- imageView.setPadding(8, 8, 8, 8);
- } else {
- imageView = (ImageView) convertView;
- }
- String path = pathsrcs.get(position);
- File file = new File(path);
- if (file.exists()) {
- Bitmap bitmap = BitmapFactory.decodeFile(path);
- imageView.setImageBitmap(bitmap);
- }
- return imageView;
- }
- }
- /**@判断是否存在该类型的图片
- * @param fileName
- * @return boolean
- */
- private boolean validate(String fileName) {
- int idx = fileName.indexOf(".");
- String subfix = fileName.substring(idx + 1);
- if (fileName.equals("")) {
- return false;
- }
- // subfix.equals()||subfix.equals(".png")||subfix.equals(".jpeg")
- if ("jpg".equals(subfix)||"png".equals(subfix)||"gif".equals(subfix)) {
- return true;
- } else {
- return false;
- }
- }
- }
手势类
- package android.apps;
- import android.app.Activity;
- import android.net.Uri;
- import android.os.Bundle;
- import android.view.GestureDetector;
- import android.view.GestureDetector.OnGestureListener;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.View.OnTouchListener;
- import android.widget.ImageView;
- import android.widget.Toast;
- public class ShowImage extends Activity implements OnTouchListener,OnGestureListener{
- private static ImageView image = null;
- private static final int FLING_MIN_DISTANCE = 120;//移动最小距离
- private static final int FLING_MIN_VELOCITY = 200;//移动最大速度
- private int position;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- image = (ImageView)findViewById(R.id.show);
- //pathsrcs-->存放图片路径的数组 ImagePositions-->选择的第几张图片
- String path = GridViewTest.pathsrcs.get(GridViewTest.ImagePositions);
- //设置图片显示路径
- image.setImageURI(Uri.parse(path));
- //设置Touch监听
- image.setOnTouchListener(this);
- //允许长按
- image.setLongClickable(true);
- }
- //构建手势探测器
- GestureDetector mygesture = new GestureDetector(this);
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return mygesture.onTouchEvent(event);
- }
- //显示下一张图片
- public void showNextImage(){
- position=++GridViewTest.ImagePositions;
- if(position>=GridViewTest.pathsrcs.size()){
- Toast.makeText(ShowImage.this, "已到最后一张图片", Toast.LENGTH_SHORT).show();
- GridViewTest.ImagePositions=GridViewTest.pathsrcs.size()-1;
- }else{
- String path = GridViewTest.pathsrcs.get(position);
- image.setImageURI(Uri.parse(path));
- }
- System.out.println("positoon="+position);
- }
- //显示上一张图片
- public void showLastImage(){
- position=--GridViewTest.ImagePositions;
- if(position<0){
- Toast.makeText(ShowImage.this, "已到第一张图片", Toast.LENGTH_SHORT).show();
- GridViewTest.ImagePositions=0;
- }else{
- String path = GridViewTest.pathsrcs.get(position);
- image.setImageURI(Uri.parse(path));
- }
- }
- /*用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,
- * 多个ACTION_MOVE, 1个ACTION_UP触发*/
- //主要方法
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- // e1:第1个ACTION_DOWN MotionEvent
- // e2:最后一个ACTION_MOVE MotionEvent
- // velocityX:X轴上的移动速度(像素/秒)
- // velocityY:Y轴上的移动速度(像素/秒)
- // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
- //向有翻图片
- if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
- && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
- showNextImage();
- }
- //向左翻图片
- if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
- && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
- showLastImage();
- }
- return false;
- }
- //下面方法没用,但是这里必须实现
- /* 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发*/
- @Override
- public void onLongPress(MotionEvent e) {}
- /* 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发*/
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {return false;}
- /* 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
- 注意和onDown()的区别,强调的是没有松开或者拖动的状态 */
- @Override
- public void onShowPress(MotionEvent e) {}
- /*用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发*/
- @Override
- public boolean onSingleTapUp(MotionEvent e) {return false;}
- @Override
- public boolean onDown(MotionEvent e) {return false;}
- }
希望对读者有帮助