日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[android] 切换按钮-自定义控件-拖动效果

發布時間:2025/6/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [android] 切换按钮-自定义控件-拖动效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

重寫ViewonTouchEvent()方法,傳遞進來MotionEvent對象

調用MotionEvent對象的getAction()方法,獲取當前動作

switch判斷一下當前動作

事件為MotionEvent.ACTION_DOWN是手指第一次觸摸屏幕

事件為MotionEvent.ACTION_MOVE是手指在屏幕上移動

事件為MotionEvent.ACTION_UP是手指離開屏幕

?

當手指觸摸到屏幕

定義手指最后的坐標lastX

調用MotionEvent對象的getX() 方法,得到lastX的值

?

當手指在屏幕上移動

定義手指橫向移動的距離dis

調用getX()-lastX就是移動的距離

定義滑動按鈕的左邊就是這個移動的距離

?

判斷slideBtnLeft位于合理的位置,0到背景圖的寬度-滑動按鈕的寬度

調用invalidate()方法,刷新視圖

?

onClick事件和onTouchEvent是有沖突

定義一個標志isDrag變量,如果有拖動發生,就把這個變量賦值true

onCllick()方法里面對這個變量進行判斷

?

當手指抬起的時候

判斷當前slideBtnLeft來確定當前按鈕是開還是關的狀態

slideBtnLeft比較 maxLeft的一半就能判斷當前狀態

?

package com.tsh.myswitchbtn;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener;public class MyToggleBtn extends View implements OnClickListener {//背景圖片private Bitmap bitmapBackground;//按鈕圖片private Bitmap bitmapBtn;private Paint paint;/*** 布局文件中使用* @param context* @param attrs*/public MyToggleBtn(Context context, AttributeSet attrs) {super(context, attrs);initView();}/*** 初始化view*/private void initView() {bitmapBackground=BitmapFactory.decodeResource(getResources(), R.drawable.switch_background);bitmapBtn=BitmapFactory.decodeResource(getResources(), R.drawable.slide_button);paint=new Paint();paint.setAntiAlias(true);//點擊事件setOnClickListener(this);}/*** 計算大小*/@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(bitmapBackground.getWidth(), bitmapBackground.getHeight());}//當前狀態private boolean currentState=false;//滑動按鈕的當前leftprivate float slideBtnLeft=0;/*** 繪制view*/@Overrideprotected void onDraw(Canvas canvas) {//繪制背景canvas.drawBitmap(bitmapBackground, 0, 0, paint);//繪制滑動按鈕canvas.drawBitmap(bitmapBtn, slideBtnLeft, 0, paint);}private boolean isDrag=false;/*** 點擊事件*/@Overridepublic void onClick(View v) {//解決與移動事件的沖突if(!isDrag){currentState = !currentState;flushState();}}private int lastX;/*** 觸摸事件*/private int firstX;@Overridepublic boolean onTouchEvent(MotionEvent event) {super.onTouchEvent(event);switch(event.getAction()){//手指按下case MotionEvent.ACTION_DOWN:firstX=lastX=(int) event.getX();isDrag=false;break;//手指移動case MotionEvent.ACTION_MOVE://解決與點擊事件沖突if(Math.abs(event.getX()-firstX)>5){isDrag=true;}int dis=(int) event.getX()-lastX;slideBtnLeft=slideBtnLeft+dis;lastX=(int) event.getX();break;//手指抬起case MotionEvent.ACTION_UP:if(isDrag){int maxLeft = bitmapBackground.getWidth()- bitmapBtn.getWidth();if (slideBtnLeft >= maxLeft / 2) {currentState = true;} else {currentState = false;}flushState();}break;}flushView();return true;}/*** 刷新狀態*/private void flushState() {if (currentState == true) {slideBtnLeft = bitmapBackground.getWidth()- bitmapBtn.getWidth();} else {slideBtnLeft = 0;}invalidate();}/*** 刷新視圖*/private void flushView() {int maxLeft=bitmapBackground.getWidth()-bitmapBtn.getWidth();slideBtnLeft=(slideBtnLeft>0) ? slideBtnLeft : 0;slideBtnLeft=(slideBtnLeft<maxLeft) ? slideBtnLeft:maxLeft;invalidate();} }

?

總結

以上是生活随笔為你收集整理的[android] 切换按钮-自定义控件-拖动效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。