Scroller 简单使用介绍

来源:互联网 发布:后端要学javascript吗 编辑:程序博客网 时间:2024/05/16 17:54

public class Scroller extends Object

介绍:

      This class encapsulates scrolling. You can use scrollers (Scroller or OverScroller) to collect the data you need to produce a scrolling animation—for example, in response to a fling gesture. Scrollers track scroll offsets for you over time, but they don't automatically apply those positions to your view. It's your responsibility to get and apply new coordinates at a rate that will make the scrolling animation look smooth.

      该类封装了滚动操作,你可以使用滚动条(滚轮和OverScroller)去收集你需要制作的滚动动画,例如,相应手势,滚动条滚动效果跟踪补偿给你一段时间,但是不会自动去应用这些View的位置,这是你的责任去不断获取和请求新的坐标使得动画看起来更加的光滑。

使用:在ViewGroup中通过使用Scroller来控制子控件的滑动,比如ListVIew,ScrollerVIew,Launcher中的PageView等

如下示例一个Button滑动一段距离的例子,在自定义的MyLinearLayout重写了computeScroll(),其他的ContentLiearnLayout,TestButton,只为了看清楚Log的执行,Scroller类的startScroll是触发滚动的方法。

public class TestActivity extends Activity {private Scroller mScroller;LinearLayout lay1, lay0;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mScroller = new Scroller(this, new DecelerateInterpolator(5.0F));lay0 = new ContentLinearLayout(this);lay0.setOrientation(LinearLayout.VERTICAL);LinearLayout.LayoutParams p0 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);this.setContentView(lay0, p0);lay1 = new MyLinearLayout(this);lay1.setBackgroundColor(this.getResources().getColor(android.R.color.darker_gray));//LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);p1.weight = 1;lay0.addView(lay1, p1);Button btn1 = new TestButton(this);btn1.setText("btn in layout1");btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mScroller.startScroll(0, 0, -500, 0, 8000);}});lay1.addView(btn1);// lay0.setLayerType(View.LAYER_TYPE_HARDWARE, null);lay1.setLayerType(View.LAYER_TYPE_SOFTWARE, null);}class TestButton extends Button {public TestButton(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Log.i("ABC", "button_ondraw");}}class MyLinearLayout extends LinearLayout {public MyLinearLayout(Context ctx) {super(ctx);}public void computeScroll() {Log.i("ABC", "layout_computeScroll");if (mScroller.computeScrollOffset()) {scrollTo(mScroller.getCurrX(), 0);Log.i("ABC", "child_layout_scrollTo_X" + mScroller.getCurrX());}}}class ContentLinearLayout extends LinearLayout {public ContentLinearLayout(Context ctx) {super(ctx);}@Overrideprotected void dispatchDraw(Canvas canvas) {super.dispatchDraw(canvas);Log.i("ABC", "parent_layout_dispatchDraw");}}}
执行了之后打印的Log如下

01-31 14:40:45.013: I/ABC(3757): child_layout_scrollTo_X=-201-31 14:40:45.028: I/ABC(3757): child_layout_scrollTo_X=-1401-31 14:40:45.113: I/ABC(3757): child_layout_scrollTo_X=-6401-31 14:40:45.171: I/ABC(3757): child_layout_scrollTo_X=-9501-31 14:40:45.246: I/ABC(3757): child_layout_scrollTo_X=-13201-31 14:40:45.317: I/ABC(3757): child_layout_scrollTo_X=-16401-31 14:40:45.381: I/ABC(3757): child_layout_scrollTo_X=-19101-31 14:40:45.395: I/ABC(3757): child_layout_scrollTo_X=-19701-31 14:40:45.416: I/ABC(3757): child_layout_scrollTo_X=-20501-31 14:40:45.433: I/ABC(3757): child_layout_scrollTo_X=-21101-31 14:40:45.506: I/ABC(3757): child_layout_scrollTo_X=-23801-31 14:40:45.572: I/ABC(3757): child_layout_scrollTo_X=-26001-31 14:40:45.647: I/ABC(3757): child_layout_scrollTo_X=-28301-31 14:40:45.663: I/ABC(3757): child_layout_scrollTo_X=-28801-31 14:40:45.725: I/ABC(3757): child_layout_scrollTo_X=-30501-31 14:40:45.785: I/ABC(3757): child_layout_scrollTo_X=-32101-31 14:40:45.847: I/ABC(3757): child_layout_scrollTo_X=-33501-31 14:40:45.865: I/ABC(3757): child_layout_scrollTo_X=-33901-31 14:40:45.885: I/ABC(3757): child_layout_scrollTo_X=-34401-31 14:40:45.900: I/ABC(3757): child_layout_scrollTo_X=-34701-31 14:40:45.971: I/ABC(3757): child_layout_scrollTo_X=-36201-31 14:40:45.988: I/ABC(3757): child_layout_scrollTo_X=-36501-31 14:40:46.006: I/ABC(3757): child_layout_scrollTo_X=-36901-31 14:40:46.022: I/ABC(3757): child_layout_scrollTo_X=-37201-31 14:40:46.043: I/ABC(3757): child_layout_scrollTo_X=-37501-31 14:40:46.061: I/ABC(3757): child_layout_scrollTo_X=-37801-31 14:40:46.076: I/ABC(3757): child_layout_scrollTo_X=-38101-31 14:40:46.096: I/ABC(3757): child_layout_scrollTo_X=-38401-31 14:40:46.112: I/ABC(3757): child_layout_scrollTo_X=-38701-31 14:40:46.130: I/ABC(3757): child_layout_scrollTo_X=-39001-31 14:40:46.191: I/ABC(3757): child_layout_scrollTo_X=-40001-31 14:40:46.248: I/ABC(3757): child_layout_scrollTo_X=-40701-31 14:40:46.312: I/ABC(3757): child_layout_scrollTo_X=-41601-31 14:40:46.375: I/ABC(3757): child_layout_scrollTo_X=-42401-31 14:40:46.436: I/ABC(3757): child_layout_scrollTo_X=-43001-31 14:40:46.500: I/ABC(3757): child_layout_scrollTo_X=-43701-31 14:40:46.516: I/ABC(3757): child_layout_scrollTo_X=-43801-31 14:40:46.534: I/ABC(3757): child_layout_scrollTo_X=-44001-31 14:40:46.556: I/ABC(3757): child_layout_scrollTo_X=-44201-31 14:40:46.572: I/ABC(3757): child_layout_scrollTo_X=-44301-31 14:40:46.658: I/ABC(3757): child_layout_scrollTo_X=-45101-31 14:40:46.719: I/ABC(3757): child_layout_scrollTo_X=-45501-31 14:40:46.789: I/ABC(3757): child_layout_scrollTo_X=-46001-31 14:40:46.805: I/ABC(3757): child_layout_scrollTo_X=-46101-31 14:40:46.871: I/ABC(3757): child_layout_scrollTo_X=-46501-31 14:40:46.942: I/ABC(3757): child_layout_scrollTo_X=-46901-31 14:40:47.008: I/ABC(3757): child_layout_scrollTo_X=-47201-31 14:40:47.073: I/ABC(3757): child_layout_scrollTo_X=-47501-31 14:40:47.090: I/ABC(3757): child_layout_scrollTo_X=-47601-31 14:40:47.111: I/ABC(3757): child_layout_scrollTo_X=-476


在绘制Button的时候在持续的调用scrollto造成顺滑滚动的效果

0 0
原创粉丝点击