亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android自定義控件仿iOS滑塊SwitchButton

2019-10-21 21:31:39
字體:
來源:轉載
供稿:網友

SwitchButton可以點擊的時候切換狀態,類似CheckBox

在拖動的時候,也可以根據拖動的距離判斷是否切換狀態,類似ToggleButton

因此要區別出單擊事件和拖動事件

實現效果如圖所示:

Android,iOS,滑塊,SwitchButton

自定義的SwitchButton如下:

public class SwitchButton extends View implements View.OnTouchListener { private Bitmap bg_on, bg_off, slipper_btn; /** * 按下時的x和當前的x */ private float downX, nowX; /** * 記錄用戶是否在滑動 */ private boolean onSlip = false; /** * 當前的狀態 */ private boolean nowStatus = false; /** * 監聽接口 */ private OnChangedListener listener; /** * 一個滑動的距離臨界值,判斷是滑動還是點擊 * getScaledTouchSlop(): * Distance in pixels a touch can wander before we think the user is scrolling * */ private int mTouchSlop=new ViewConfiguration().getScaledTouchSlop();  public SwitchButton(Context context) { super(context); init(); } public SwitchButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } public void init(){ //載入圖片資源 bg_on = BitmapFactory.decodeResource(getResources(), R.mipmap.switch_on_on); bg_off = BitmapFactory.decodeResource(getResources(), R.mipmap.switch_off_off); slipper_btn = BitmapFactory.decodeResource(getResources(), R.mipmap.switch_ball_ball); setOnTouchListener(this); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); Matrix matrix = new Matrix(); Paint paint = new Paint(); float x = 0; //根據nowX設置背景,開或者關狀態 if (nowX < (bg_on.getWidth()/2)){ canvas.drawBitmap(bg_off, matrix, paint);//畫出關閉時的背景 }else{ canvas.drawBitmap(bg_on, matrix, paint);//畫出打開時的背景 } if (onSlip) {//是否是在滑動狀態, if(nowX >= bg_on.getWidth())//是否劃出指定范圍,不能讓滑塊跑到外頭,必須做這個判斷 x = bg_on.getWidth() - slipper_btn.getWidth()/2;//減去滑塊1/2的長度 else x = nowX - slipper_btn.getWidth()/2; }else { if(nowStatus){//根據當前的狀態設置滑塊的x值 x = bg_on.getWidth() - slipper_btn.getWidth(); }else{ x = 0; } } //對滑塊滑動進行異常處理,不能讓滑塊出界 if (x < 0 ){ x = 0; } else if(x > bg_on.getWidth() - slipper_btn.getWidth()){ x = bg_on.getWidth() - slipper_btn.getWidth(); } //畫出滑塊 canvas.drawBitmap(slipper_btn, x, 0, paint); }  @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN:{ if (event.getX() > bg_off.getWidth() || event.getY() > bg_off.getHeight()){ return false; }else{ onSlip = true; downX = event.getX(); nowX = downX; } break; } case MotionEvent.ACTION_MOVE:{ nowX = event.getX(); break; } case MotionEvent.ACTION_UP:{ DebugLog.e("mTouchSlop:"+mTouchSlop); onSlip = false; nowX = event.getX(); float float_distance=nowX - downX; int int_disatnce=(int)float_distance; DebugLog.e("int_disatnce:"+int_disatnce); /** * 滑動距離太短,認定是點擊事件 */ if(Math.abs(int_disatnce)<mTouchSlop){ if(this.isChecked()){ this.setChecked(false); nowX = 0; }else{ this.setChecked(true); nowX = bg_on.getWidth() - slipper_btn.getWidth(); } }else{ /** * 滑動距離足夠,認為是滑動事件 */ if(event.getX() >= (bg_on.getWidth()/2)){ nowStatus = true; nowX = bg_on.getWidth() - slipper_btn.getWidth(); }else{ nowStatus = false; nowX = 0; } } if(listener != null){ listener.OnChanged(SwitchButton.this, nowStatus); } break; } } //刷新界面 invalidate(); return true; } /** * 為WiperSwitch設置一個監聽,供外部調用的方法 * @param listener */ public void setOnChangedListener(OnChangedListener listener){ this.listener = listener; } /** * 設置滑動開關的初始狀態,供外部調用 * @param checked */ public void setChecked(boolean checked){ if(checked){ nowX = bg_off.getWidth(); }else{ nowX = 0; } nowStatus = checked; } public boolean isChecked() { return nowStatus; } /** * 回調接口 * */ public interface OnChangedListener { public void OnChanged(SwitchButton wiperSwitch, boolean checkState); }}

布局文件中使用:

<com.uestcneon.chuji.changjianglife.share.SwitchButton android:id="@+id/user_privacy_state" android:layout_width="wrap_content" android:layout_height="20dp" android:layout_marginLeft="30dp" />

控件用到的3個資源圖片:

Android,iOS,滑塊,SwitchButtonAndroid,iOS,滑塊,SwitchButtonAndroid,iOS,滑塊,SwitchButton

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人短视频| 日韩成人网免费视频| 精品国产一区二区三区四区在线观看| 欧美在线视频观看免费网站| 欧美人在线视频| 色偷偷噜噜噜亚洲男人的天堂| 亚洲一区二区三区成人在线视频精品| 成人黄色短视频在线观看| 精品无人区乱码1区2区3区在线| 国内精品久久久久久| 亚洲性生活视频在线观看| 日韩一二三在线视频播| 亚洲国产精品成人一区二区| 欧美综合激情网| 日本成人免费在线| 亚洲精品在线观看www| 2019中文字幕在线| 精品国产乱码久久久久酒店| 91久久精品久久国产性色也91| 亚洲free嫩bbb| 亚洲激情在线观看| 日韩专区在线播放| 国产一区二区激情| 狠狠久久五月精品中文字幕| 亚洲精品一区久久久久久| 国产精品日韩在线观看| 中文字幕亚洲色图| 成人乱人伦精品视频在线观看| 91精品免费看| 日韩成人高清在线| 欧美激情xxxx性bbbb| 久久久久免费精品国产| 91精品美女在线| 欧美日韩中文字幕| 国产欧美最新羞羞视频在线观看| 77777亚洲午夜久久多人| 1769国内精品视频在线播放| 国产一区二区动漫| 国产91网红主播在线观看| 久久青草精品视频免费观看| 国产精品久久综合av爱欲tv| 人人爽久久涩噜噜噜网站| 日韩av免费网站| 成人免费网站在线观看| 国产精品久久久久一区二区| 久久久电影免费观看完整版| 精品成人久久av| 国产精品xxx视频| 搡老女人一区二区三区视频tv| 亚洲国产日韩欧美在线99| 欧美大秀在线观看| 欧美精品国产精品日韩精品| 色妞在线综合亚洲欧美| 91国在线精品国内播放| 日本精品久久久久久久| 欧美性视频在线| 2019日本中文字幕| 日韩激情在线视频| 在线观看视频99| 午夜精品在线视频| 按摩亚洲人久久| 国产精品都在这里| 日本精品性网站在线观看| 亚洲性生活视频| 亚洲第一页中文字幕| 国产精品一区二区久久久| 国产剧情久久久久久| 欧美日本亚洲视频| 91麻豆国产精品| 欧美日韩免费网站| 亚洲精品福利在线| 97在线免费视频| 日韩av电影在线播放| xxxxxxxxx欧美| 91视频国产高清| 久久国产视频网站| 国产亚洲福利一区| 日韩小视频网址| 97精品一区二区三区| 日韩在线高清视频| 亚洲视频视频在线| 成人乱色短篇合集| 精品视频在线播放色网色视频| 欧美日韩电影在线观看| 国产日韩欧美一二三区| 国产精品91久久久| 欧美久久精品一级黑人c片| 操日韩av在线电影| 亚洲综合在线小说| 96sao精品视频在线观看| 欧美超级乱淫片喷水| 亚洲日本中文字幕| 国产精品久久久久久一区二区| 国产精品电影久久久久电影网| 国产视频在线观看一区二区| 91精品在线观看视频| 日韩在线精品一区| 欧美午夜激情小视频| 欧美做爰性生交视频| 亚洲一区第一页| 高清一区二区三区日本久| 日日狠狠久久偷偷四色综合免费| 久久久久久久久网站| 国产精品影院在线观看| 欧美精品videos性欧美| 美女国内精品自产拍在线播放| 欧美中文字幕在线视频| 亚洲大尺度美女在线| 国产亚洲精品91在线| 性欧美办公室18xxxxhd| www.日韩系列| 91亚洲精品在线| 国产丝袜视频一区| 欧美视频裸体精品| 精品女同一区二区三区在线播放| 97香蕉久久超级碰碰高清版| 久久五月天综合| 国产精品欧美亚洲777777| 国自在线精品视频| 国产精品久久久久91| 国产欧美中文字幕| 欧美激情一区二区三区久久久| 亚洲精选中文字幕| 91久久久久久国产精品| 精品性高朝久久久久久久| 欧美大尺度激情区在线播放| 精品国内产的精品视频在线观看| 88xx成人精品| 国产精品日本精品| 欧美精品少妇videofree| 亚洲综合成人婷婷小说| 亚洲自拍高清视频网站| 亚洲三级黄色在线观看| 国产www精品| 国产精品久久久久免费a∨大胸| 91亚洲国产成人久久精品网站| 不卡av在线播放| 亚洲成av人乱码色午夜| 欧美成人午夜激情| 国产精品欧美一区二区| 国产精品自产拍高潮在线观看| 91精品久久久久久久久中文字幕| 九九九久久久久久| 中文字幕亚洲综合久久筱田步美| 中文字幕亚洲一区二区三区五十路| www亚洲欧美| 久久综合五月天| 91高清免费视频| 91高清视频免费观看| 国语自产精品视频在线看抢先版图片| 中文字幕亚洲情99在线| 成人美女av在线直播| 成人免费视频在线观看超级碰| 亚洲自拍偷拍第一页| 欧美国产一区二区三区| 全色精品综合影院| 一本一本久久a久久精品牛牛影视| 中文字幕精品在线视频| 国产精品一二三视频| 成人久久久久久久| 欧美国产日产韩国视频| 精品国产999| 欧美一性一乱一交一视频| 在线播放亚洲激情|