android 滚动与设置接口方法
来源:互联网 发布:淘宝上找不到的衣服 编辑:程序博客网 时间:2024/05/22 08:02
滚动方法:
目前知道滚动有两种方法
第一种为根据触摸事件发生滚动:
即在View里面运用
public boolean dispatchTouchEvent(MotionEvent ev) 这个方法来分发触摸事件;然后根据
public boolean onTouchEvent(MotionEvent ev) 方法来实现事件的动作;
这个dispatchTouchEvent 与onTouchEvent有什么关系呢;那么这里就还需要在谈到一个方法为onInterceptTouchEvent;
即一个触摸事件来到就会先到最上面的一层View里的dispatchTouchEvent方法,如果此方法返回True;就交给这个View里的OntouchEvent方法来执行;如果返回False就交给OnInterceptTouchEvent方法来执行;如果OnIntercept这个方法返回True;又交给本View的OntouchEvent方法执行;如果返回False;就交给子View的dispatchTouchEvent方法执行;。。。。又到子View的OnTouchEvnet方法;如果这个方法返回True;则执行完毕;如果返回False;则又找父View的OnTouchEvent方法执行;如果还不懂请参照这个大神的网址:http://mobile.51cto.com/abased-374715.htm;
两个事件的方法:
public boolean dispatchTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// 假如scroller滚动还没有结束,我们直接返回
if (!scroller.isFinished()) {
return super.dispatchTouchEvent(ev);
}
downx = (int) ev.getX();
downy = (int) ev.getY();
mPosition = pointToPosition(downx, downy);
int firstposition = getFirstVisiblePosition();
itemview = getChildAt(mPosition - firstposition);
break;
case MotionEvent.ACTION_MOVE:
int movex = (int) ev.getX();
int movey = (int) ev.getY();
detailx = movex - downx;
int detaily = movey - downy;
downx = movex;
downy = movey;
//System.out.println(detaily);
if (Math.abs(detailx) > mTouchSlop && Math.abs(detaily) < mTouchSlop) {
isSlide = true;
}
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
int action = ev.getAction();
if (isSlide) {
addVelocityTracker(ev);
switch (action) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
itemview .scrollBy(-detailx, 0);
break;
case MotionEvent.ACTION_UP:
scrollByDistanceX();
isSlide = false;
break;
default:
break;
}
}
return super.onTouchEvent(ev);
}
这是两个例子方法;
第二种滚动方法是通过Scroller这个类来实现 : 引自 http://blog.csdn.net/xiaanming/article/details/17483273
大致原理为:Scroller.start(原X位置,原Y位置,需要移动的X位置距离,Y位置距离,持续时间);
postInvalidate();;重画
继承computeScroll(); 方法
在computeScroll()方法里循环如:
@Override
public void computeScroll() {
while(scroller.computeScrollOffset()) {
int scrox = scroller.getCurrX();
int scroy = scroller.getCurrY();
itemview.scrollTo(scrox,scroller.getCurrY());
// System.out.println(scroller.getCurrX() + "-----" +scroller.getCurrY());
postInvalidate();
if (scroller.isFinished()) {
// itemview.scrollTo(0, 0);
removeItemListener.remvoeItenListener(mPosition);
}
}
}
求大神指导这里
scroller.startScroll(itemview.getScrollX(), 0, -delta, 0,
1000);
postInvalidate();
我运用了这个Start方法,然后又用上面的循环代码;我的ItemView不是持续运动;而是等 1后,ItemView在直接到最后,也就是没有中间的运动过程?????
然后在说一个设置接口问题
在类里写一个内部接口:
如:public interface RemoveItemListener{
public void remvoeItenListener(int potition);
}
在到此类里写一个成员变量
private RemoveItemListene removeItemListener;
在实现一个方法 :setOnRemoveItemListerer( RemoveItemListener listener ) {
this.removeItemListerner = listener;
}
最后在类里需要Remove的地方 运用这个方法就行:remvoeItenListener(int potition);
- android 滚动与设置接口方法
- Android 设置listview在scrollView中不滚动的方法
- Android设置滚动条
- 滚动视图UIScrollView设置滚动的方法
- android 设置滚动条样式
- android ListView 设置不滚动
- Android设置TextView能够滚动
- Android TextView滚动条设置
- android 设置ListView不让滚动
- Android设置TextView自滚动
- Android TextView多行文本滚动实现与ScrollView的滚动条为隐藏的方法
- android ethernet 接口设置
- CSS设置table下tbody滚动条与thead对齐的方法
- Android 关于设置ScrollView的滚动条为隐藏的方法
- 设置Silverlight应用程序滚动条适应方法
- 为TextView设置滚动的方法
- TextView 内容横向滚动的设置方法
- linux中接口设置方法
- Asp.net MVC3 文本编辑器KindEditor使用及图片上传浏览
- Android---手动创建线程与GUI线程同步(三)
- 跟着实例学习ZooKeeper的用法: 缓存
- 一个数组保存了N个结构
- 链表基础知识
- android 滚动与设置接口方法
- centos下安装redis,并且设置自启动脚本
- Hibernate HelloWorld-06 单向多对一的映射关系
- 面试题29:数组中出现次数超过一半的数字
- 算法导论(二)堆排序
- hdu 5246 超级赛亚ACMer
- Virtual Box cannot access the kernel driver
- TCP三次握手和四次挥手过程以及连接为什么使用三次连接,释放使用四次
- 一步一步跟我学习lucene(17)---lucene搜索之expressions表达式处理