Android 自定义滑动控件相关
2013-04-15 14:54
225 查看
最近做侧滑控件,又把相关的知识梳理了一遍. 现总结如下
--------------------------------------
具体应用的例子为:
Launcher,个人的控件ScrollLayout,还有平铺的SlidingMenu等等.
------------------------
------------------------
比如,我要使控件固定在右侧的位置那么只要用如下方法即可:
-------------------------
处理手势的必备函数.这几种函数好好编写逻辑,才可达到想要的效果.
比如: 我在改写SlidingDrawer为侧滑菜单时就遇到了一个问题,里面的按钮不能够点击.
因为SlidingDrawer的handle里面是不用放控件的,在改写里我把Handle改写为内容页,内容页里面肯定会放按钮之类的东西.
SlidingDrawer的onInterceptTouchEvent事件简化是这样写的:
也就是说只要点击的是Handle区域就进行拦截. 这样的话,子控件就不能获取到事件了. 在侧滑菜单中改成了这样:
只有是左右滑动事件时,才进行拦截,这样 子控件就能进行响应.
-------------------------
用来跟踪触摸速度的类 当你需要跟踪的时候使用obtain()方法来来获得VelocityTracker类的一个实例对象,使用addMovement(MotionEvent)函数将当前的移动事件传递给VelocityTracker对象 使用computeCurrentVelocity (int units)函数来计算当前的速度,使用getXVelocity ()、getYVelocity ()函数来获得当前的速度.
--------------------------
--------------------------------------
1. View的ScrollTo和ScrollBy.
这两个函数是用来使子控件滚动的. 比如:我在ViewB上使用ViewB.ScrollTo(x,y),那么ViewB的子控件就会进行滚动,但ViewB本身不会移动.具体应用的例子为:
Launcher,个人的控件ScrollLayout,还有平铺的SlidingMenu等等.
------------------------
2. offsetLeftAndRight 或 offsetTopAndBottom
这两个方法是使控件进行临时滚动的. 以控件现在位置为坐标原点进行上下左右滚动,比如要使控件向右移动2个像素,只需要传入2即可.这两个函数只能使控件临时滚动,即手松开后,滚动的效果就没有了,会恢复到滚动前的位置.------------------------
3. View.Layout()
上面的控件只是能够临时滚动,滚动完后保存位置就需要用到Layout了.比如,我要使控件固定在右侧的位置那么只要用如下方法即可:
mContentView.layout(偏移量, mContentView.getTop(), 偏移量+ mContentView.getWidth(), mContentView.getBottom());
-------------------------
4.写控件必备:
public boolean dispatchTouchEvent(MotionEvent ev)://传递Touch事件至target view(可以是自己)。 public boolean onInterceptTouchEvent(MotionEvent ev)://在ViewGroup中定义,用于拦截Touch事件的传递。 public boolean onTouchEvent(MotionEvent event): //Touch事件处理函数。
处理手势的必备函数.这几种函数好好编写逻辑,才可达到想要的效果.
比如: 我在改写SlidingDrawer为侧滑菜单时就遇到了一个问题,里面的按钮不能够点击.
因为SlidingDrawer的handle里面是不用放控件的,在改写里我把Handle改写为内容页,内容页里面肯定会放按钮之类的东西.
SlidingDrawer的onInterceptTouchEvent事件简化是这样写的:
if (!mTracking && !frame.contains((int) x, (int) y)) { return false; } return true
也就是说只要点击的是Handle区域就进行拦截. 这样的话,子控件就不能获取到事件了. 在侧滑菜单中改成了这样:
if(action == MotionEvent.ACTION_MOVE){ final int xDiff = (int) Math.abs(moveX - x); final int yDiff = (int) Math.abs(moveY - y); //是左右滑动 if (xDiff > MOVE_MIN_NUM && yDiff < xDiff / 2) { return true; }
只有是左右滑动事件时,才进行拦截,这样 子控件就能进行响应.
-------------------------
5. VelocityTracker
只要涉及到滑动基本都会用到他.用来跟踪触摸速度的类 当你需要跟踪的时候使用obtain()方法来来获得VelocityTracker类的一个实例对象,使用addMovement(MotionEvent)函数将当前的移动事件传递给VelocityTracker对象 使用computeCurrentVelocity (int units)函数来计算当前的速度,使用getXVelocity ()、getYVelocity ()函数来获得当前的速度.
--------------------------
6. Scroller
这个类封装了滚动操作。滚动的持续时间可以通过构造函数传递 ,并且可以指定滚动动作的持续的最长时间。经过这段时间,滚动会自动定位到最终位置,并且通过computeScrollOffset ()会得到的返回值为false,表明滚动动作已经结束。相关文章推荐
- Android 自定义滑动控件相关
- Android自定义星星可滑动评分控件
- android自定义滑动开关控件,适合所有的android系统
- android自定义滑动开关控件,适合所有的android系统
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android自定义滑动解锁控件使用详解
- android自定义滑动开关控件,适合所有的android系统
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android进阶自定义控件之滑动开关
- Android 从0开始自定义控件之 View 的滑动冲突详解(四)
- Android自定义控件之滑动解锁九宫格
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android自定义滑动确认控件SlideView
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android自定义LinearLayout实现左右侧滑菜单,完美兼容ListView、ScrollView、ViewPager等滑动控件
- Android自定义控件之滑动开关
- Android学习自定义View(四)——继承控件(滑动时ListView的Item出现删除按钮)