记安卓开发中监听左右手势滑动
来源:互联网 发布:linux grub.cfg 编辑:程序博客网 时间:2024/05/29 14:41
在开发中,遇到了一个需求,就是左右滑动的时候无限的滑动,没有张数限制。
我的解决方法如下:
1,一个listview列表监听手势左右滑动。
2,在左右滑动的时候加一个左进右出的动画效果,给人的感觉就是在翻页。
接下来就是代码的实现:
1,重写listview
public class HSlidableListView extends ListView { Context context; GestureDetector gestureDetector; OnFlingListener mListener; /* * 设置左右滑动监听 * */ public void setOnFlingListener(OnFlingListener listener) { this.mListener = listener; gestureDetector = new GestureDetector(context, new Gesture(context, mListener)); } public HSlidableListView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public HSlidableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; } public HSlidableListView(Context context) { super(context); this.context = context; } @Override public boolean onTouchEvent(MotionEvent ev) { if (gestureDetector.onTouchEvent(ev)) return true;//当左右滑动时自己处理 return super.onTouchEvent(ev); } /* * 滑动监听 * */ public class Gesture implements GestureDetector.OnGestureListener { Context context; OnFlingListener mListener; public Gesture(Context context, OnFlingListener listener) { this.context = context; this.mListener = listener; } @Override public boolean onDown(MotionEvent e) { return false; } @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { return false; } @Override public void onLongPress(MotionEvent e) { } @Override /** * */ public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (Math.abs(e1.getX() - e2.getX()) > Math.abs(e1.getY() - e2.getY())) {//当左右滑动距离大于上下滑动距离时才认为是左右滑 // 左滑 if (e1.getX() - e2.getX() > 100) { mListener.onLeftFling(); return true; } // 右滑 else if (e1.getX() - e2.getX() < -100) { mListener.onRightFling(); return true; } } return true; } } /* * 左右滑动时调用的监听接口 * */ public interface OnFlingListener { public void onLeftFling(); public void onRightFling(); }}2,布局中引用:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.example.administrator.student.util.HSlidableListView android:id="@+id/lv_schedule" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>3,在界面中调用:
/* * 给该listview设置监听,做出相应操作 * */ mLvSchedule.setOnFlingListener(new OnFlingListener() { @Override public void onLeftFling() { Log.e("y-p", "left"); Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.in_from_right); Animation animation1 = AnimationUtils.loadAnimation(getActivity(), R.anim.out_to_left); AnimationSet set = new AnimationSet(true); set.addAnimation(animation); set.addAnimation(animation1); set.setDuration(1000); mLvSchedule.startAnimation(set); initData(2); } @Override public void onRightFling() { Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.in_from_left); Animation animation1 = AnimationUtils.loadAnimation(getActivity(), R.anim.out_to_right); AnimationSet set = new AnimationSet(true); set.addAnimation(animation); set.addAnimation(animation1); set.setDuration(1000); mLvSchedule.startAnimation(set); initData(1); } });}根据左滑还是右滑去请求数据:
in_from_right:
<?xml version="1.0" encoding="utf-8"?><set xmlns:Android="http://schemas.android.com/apk/res/android"> <!--6 //动画对象的起始X坐标7 //动画对象的结束X坐标8 //这里是横向移动,所以Y坐标无需改变,始终是09 //动画时间2s10 --> <translate Android:duration="500" Android:fromXDelta="100%p" Android:fromYDelta="0" Android:toXDelta="0" Android:toYDelta="0" /></set>in_from_left:
<?xml version="1.0" encoding="utf-8"?><set xmlns:Android="http://schemas.android.com/apk/res/android" > <!-- //动画对象的起始X坐标 //动画对象的结束X坐标 //这里是横向移动,所以Y坐标无需改变,始终是0 //动画时间2s --> <translate Android:fromXDelta="-100%p" Android:toXDelta="0" Android:fromYDelta="0" Android:toYDelta="0" Android:duration="500" /></set>out_to_left:
<?xml version="1.0" encoding="utf-8"?><set xmlns:Android="http://schemas.android.com/apk/res/android" > <!--动画对象的起始X坐标 //动画对象的结束X坐标 //这里是横向移动,所以Y坐标无需改变,始终是0 //动画时间2s --> <translate Android:fromXDelta="0" Android:toXDelta="-100%p" Android:fromYDelta="0" Android:toYDelta="0" Android:duration="500" /></set>out_to_right:
<?xml version="1.0" encoding="utf-8"?><set xmlns:Android="http://schemas.android.com/apk/res/android" > <!--动画对象的起始X坐标 //动画对象的结束X坐标 //这里是横向移动,所以Y坐标无需改变,始终是0 //动画时间2s --> <translate Android:fromXDelta="0" Android:toXDelta="100%p" Android:fromYDelta="0" Android:toYDelta="0" Android:duration="500" /></set>ok,这就解决了问题
阅读全文
0 0
- 记安卓开发中监听左右手势滑动
- Android中Activity中左右滑动手势的监听
- Android 自定义View 实现手势监听,左右滑动,上下滑动
- android开发之滑动手势翻图 滑动手势监听
- android开发之滑动手势翻图 滑动手势监听
- android开发之滑动手势翻图 滑动手势监听
- android 手势左右滑动
- android手势左右滑动
- android 手势左右滑动
- android 手势左右滑动
- android手势左右滑动
- ios 左右滑动手势
- 监听界面左右滑动
- Android手势滑动监听
- android 手势滑动监听
- uitableviewcell的左右滑动手势
- IOS 手势之左右滑动
- 使用手势模拟左右滑动
- 关于skinmagic的使用具体步骤
- leetcode Question5.Longest Palindromic Substring
- java 取一个整数a从右端开始的4~7位。
- TextView使用getString(resId, args)对args设置字体颜色
- 就这样你跟我提月薪要十几K?
- 记安卓开发中监听左右手势滑动
- Java并发之ReentrantReadWriteLock
- BMP转yuV
- 欢迎使用CSDN-markdown编辑器
- Linux下常用文件解压(包括RMP、DEB的解压方法)
- Mac升级openssl
- 手机端select input textarea的美化方式
- ROS机器人操作系统的安装、配置与初级教程 3
- java 打印出杨辉三角形