您的当前位置:首页>关注 > 正文

SrollToollBy和rollTo有什么区别?SrollToollBy和rollTo的区别:每日关注

来源:CSDN 时间:2023-04-13 07:51:32


(资料图)

SrollTo

SrollBy和SrollTo的区别

Scroller

案例–滑动解锁

package com.lxk.slideunlock;import com.lxk.slideunlock.view.SildeUnLockView;import com.lxk.slideunlock.view.SildeUnLockView.OnUnLockListener;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.Toast;public class MainActivity extends Activity implements OnUnLockListener {private SildeUnLockView mSlv;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mSlv = (SildeUnLockView) findViewById(R.id.slv);    mSlv.setOnUnLockListener(this);}@Overridepublic void UnLock() {    //利用接口回调方法    Toast.makeText(this,"成功解锁", 0).show();    finish();}}

package com.lxk.slideunlock.view;import com.lxk.slideunlock.R;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.provider.ContactsContract.CommonDataKinds.Event;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.Scroller;/** * 滑动解锁--View是表示显示在UI界面上面的 *  自定义View的三个步骤: *  1.测量自己的大小 *  2.设置自己现在在父控件的位置 *  3.绘画该控件出来 */public class SildeUnLockView  extends View{private static  boolean isRight = false;private Paint mPaint;private Scroller mScroller;private Bitmap mBitmap;public SildeUnLockView(Context context, AttributeSet attrs) {    super(context, attrs);    //创建一个画笔    mPaint = new Paint();    //创建一个滑动效果的工具类Scroller(context)---    mScroller = new Scroller(context);    //加载一个图片    mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.switch_button);}//测量自己的大小@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    //super.onMeasure(widthMeasureSpec, heightMeasureSpec);//这个是使用父类布局的大小        //设置图片的宽度跟父类一样        int width = MeasureSpec.getSize(widthMeasureSpec);        setMeasuredDimension(width, mBitmap.getHeight());}//绘画@Overrideprotected void onDraw(Canvas canvas) {    //绘画该图片出来    canvas.drawBitmap(mBitmap, 0, 0, mPaint);}float mDownX,mMoveX,mUpX;//重写父类的onTuchEvent(MotionEvent event)方法来监听触摸事件@Overridepublic boolean onTouchEvent(MotionEvent event) {    switch (event.getAction()) {    case MotionEvent.ACTION_DOWN://监听按下的动作        //开始规定如果鼠标按下的X坐标不在图片的宽度/2和图片的宽度之间,就不允许滑动        mDownX=event.getX();        if (mDownXmBitmap.getWidth()) {            return false;//false则交给系统处理 不需要我们处理,相当不允许图片滑动了        }        //执行按下的操作方法        performDown();        break;    case MotionEvent.ACTION_MOVE://鼠标触摸移动的动作        //获取移动的X的位置        mMoveX=event.getX();        performMove();        break;    case MotionEvent.ACTION_UP://鼠标抬起的动作        mUpX=event.getX();        performUp();        break;    }    return true;//true表示事件发生的改变,都由我们自己处理,不需要别人}//执行抬起的动作方法private void performUp() {    //规定如果抬起来的X坐标大于控件背景一般则直接移动到右边的边界处,否则直接移动到左边的边界    int dx=0;    if (mUpX>getMeasuredWidth()/2) {        isRight=true;         dx=(int) (mBitmap.getWidth()-getMeasuredWidth()-getScrollX());         System.out.println("dx=== 1"+dx);    } else {         dx=-getScrollX();         System.out.println("dx===2 "+dx);    }    int durantion=dx*7;    //如果时间太长则就按1000毫秒来算    if (durantion>1000) {        durantion=1000;    }    //利用Scroller类来来滑动==参数一二表示:开始移动的xy坐标,参数三四:表示水平和垂直移动的距离,参数五:移动的时间    mScroller.startScroll(getScrollX(), 0, dx, 0,durantion);    //重新绘制    invalidate();}//当前没有移动完则继续移动@Overridepublic void computeScroll() {    super.computeScroll();    if (mScroller.computeScrollOffset()) {        //获取当前的移动X坐标        int currX = mScroller.getCurrX();        //继续移动完        scrollTo(currX, 0);        //重新绘制        invalidate();    } else {        //判断是否是向右边移动如果是且超过背景一半则解锁        if (isRight) {            mListener.UnLock();            //重置状态            isRight=false;        }    }}//执行移动的距离private void performMove() {    int dx=Math.round(mDownX-mMoveX);    //界定边界--判断移动过程是否超过边界    if (-dx>getMeasuredWidth()-mBitmap.getWidth()) {//判断右边的边界        dx=mBitmap.getWidth()-getMeasuredWidth();    } else if (dx>0) {//判断左边的边界        dx=0;    }    scrollTo(dx, 0);//SroollTo是直接移动到设定的位置}OnUnLockListener mListener;//定义一个成员的变量:mListenerpublic void setOnUnLockListener(OnUnLockListener listener){    mListener=listener;//通过MainActivity传过来的参数    }//创建一个接口回调public interface OnUnLockListener{    public void UnLock();    }}

标签:

最新新闻:

新闻放送
Top