Scroller、scrollBy scrollTo

作者: 大漠孤烟直_v | 来源:发表于2018-11-16 10:17 被阅读9次
public class MyView extends android.support.v7.widget.AppCompatTextView {

    private Scroller scroller;

    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        scroller = new Scroller(context);
    }

    /**
     * 缓慢滚动到指定位置
     *
     * @param destX 目的x
     * @param destY 目的y
     */
    public void smoothScrollTo(int destX, int destY) {
        //原本内容在X轴的偏移量
        int scrollX = getScrollX();
        //原本内容在Y轴的偏移量
        int scrollY = getScrollY();
        //偏移量 -为正方向 +为反方向
        int deltaX = scrollX - destX;
        int deltaY = scrollY - destY;
        scroller.startScroll(scrollX, scrollY, deltaX, deltaY, 1500);
        invalidate();
    }

    @Override
    public void computeScroll() {
        //先判断mScroller滚动是否完成
        if (scroller.computeScrollOffset()) {
            //这里调用View的scrollTo()完成实际的滚动
            scrollTo(scroller.getCurrX(), scroller.getCurrY());
            //必须调用该方法,否则不一定能看到滚动效果
            postInvalidate();
        }
        super.computeScroll();
    }
}
 final RelativeLayout rl = findViewById(R.id.rl);
        final MyView myView = findViewById(R.id.txtOne);
        rl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //使用scrollTo或scrollBy来实现view的滑动,只能将view的内容进行滑动,并不能将view本身进行移动 so -为正方向 +为反方向
                //scrollTo()方法是让View相对于初始的位置滚动某段距离,由于View的初始位置是不变的,因此不管我们点击多少次scrollTo按钮滚动到的都将是同一个位置。
                // 而scrollBy()方法则是让View相对于当前的位置滚动某段距离,那每当我们点击一次scrollBy按钮,View的当前位置都进行了变动.
                rl.scrollBy(100, 0);
//                rl.scrollTo(0, 0);
            }
        });
        myView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myView.smoothScrollTo(100, 50);
            }
        });

相关文章

网友评论

    本文标题:Scroller、scrollBy scrollTo

    本文链接:https://www.haomeiwen.com/subject/vivpfqtx.html