Android Scroller的基本使用
来源:互联网 发布:android json解析库 编辑:程序博客网 时间:2024/06/04 18:19
Scroller
android 原生类,滚动器。
Scroller基础知识
- 滚动的动作由基类view的scrollTo(x,y) 和scrollBy(dx,dy)的两个方法完成,scroller只是要根据滚动的起始位置和结束生成中间的过度动画。来形成一个滚动的动画。
- 注意:scroller类需要与容器类进行配合才能产生滚动的过程,
因为一个View在容器(比如ViewGroup)中的滚动不是自身发起的动作,而是由父容器驱动容器内的子控件来完成,换句话说就是发生滚动效果的是组件的内容。例如在ViewGroup中使用Scroller,移动的是所有子View。但如果在TextView中使用,那么移动的将是TextView中的文本。
scrollTo()与ScrollBy()
都是对view进行滑动
- scrollTo(int x,int y)滑动到终点位置(x,y)
- scrollBy(int dx,int dy),使view进行相对滑动,横向滑动距离为dx,树向距离为dy。起始调用了scrollTo的方法。
Scroller的基本使用
- public void startScroll(int startX,int startY,int dx,int dy)
- public void startScroll(int startX,int startY,int dx,int dy,int duration)
- public void abortAnimation()
- public final void forceFinished(boolean finished)
- public final int getCurrX()
- public final int getCurrY()
- public boolean computeScrollOffset()
简单MyScrollToByLayout
public class MyScrollToByLayout extends ViewGroup { private Button btn1,btn2; private Scroller mScroller; ...... public MyScrollToByLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mScroller=new Scroller(context); btn1=new Button(context); btn2=new Button(context); //新建两个Button实例btn1,btn2 btn1.setText("Button1"); btn2.setText("Button2"); addView(btn1); addView(btn2); //将两个Button添加到当前layout中 btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mScroller.startScroll(getLayout().getScrollX(),getLayout().getScrollY(), (int)btn2.getX(),(int)btn2.getY(),10000); postInvalidate(); } });}.......@Overridepublic void computeScroll(){ if(mScroller.computeScrollOffset()){ this.scrollTo(mScroller.getCurrX(),mScoller.getCurrY()); postInvalidate(); }}public MyScrollToByLayout getLayout(){ return this;}public Scroller getScroller(){ return this.mScroller;}
}`
总结
平滑滚动的基本工作流程我们可以总结为:
调用Scroller对象的startScroll()方法定义滚动的起始位置和滚动的距离
通过invalidate()或postInvalidate()方法刷新,调用draw(Canvas canvas)方法重绘组件
调用computeScroll()计算下一个位置的坐标
再次调用invalidate()或postInvalidate()方法刷新重绘
判断computeScroll()方法的返回值,如果为false表示结束滚动,为true表示继续滚动
上面的步骤其实构建了一个方法调用循环:1–>2–>3–>4–>5–>3–>4–>5–>……,而3–>4–>5就是一个循环,该循环用于不断计算下一个位置,并通过重绘移动到该位置,这样就产生了动画效果。同时我们应该注意到computeScroll()是个空方法来的,我们必须要重写该方法才能实现平滑滚动。
参考:http://www.jianshu.com/p/3482a9e0ca65
0 0
- Android Scroller的基本使用
- 猎影-----Scroller的基本使用
- android scroller类的使用
- android scroller类的使用
- android scroller类的使用
- Android Scroller的简单使用
- Android Scroller基本理解
- Android开发之Scroller的使用详解
- Android Scroller的使用完全解析
- android Scroller使用
- Android Scroller使用详解
- Android Scroller OverScroller使用
- Android Scroller的用法
- Android的Scroller介绍
- Android Scroller的理解
- Android Scroller 的理解
- Android的Scroller介绍
- Android的Scroller用法
- 并行方法之多线程生产者与消费者问题的逻辑讲解
- 物化视图
- mysql数据库中循环插入
- 添加数据库用户
- sql 基本语句
- Android Scroller的基本使用
- proxool
- 计算机基础知识
- KMP算法的Next数组详解
- 分割视图器UISplitViewController初使用
- Android 解决小米手机选取图片返回值为null
- 预防XSS攻击需要注意的地方。
- ubuntu上使用draw_net.py绘制caffe ssd网络结构
- redmine安装部署