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

首頁 > 系統 > Android > 正文

Android自定義實現可滑動按鈕

2019-10-21 21:26:14
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android自定義實現可滑動按鈕的具體代碼,供大家參考,具體內容如下

實現邏輯

1.創建一個類繼承view類,實現里面的onMeasure() onDraw()方法

2.在 onMeasure() 中需要調用setMeasuredDimension(viewWidth,viewheight),用來繪制按鈕的位置區域

3.需要加載按鈕的背景和滑塊資源 并且轉化為bitmap對象

4.獲取背景圖片的寬和高作為自定義控件的寬和高

5.獲取滑塊的寬度,用來調整按鈕的開和關

6.在onDraw()方法中繪制出背景圖片和滑塊,并展示在頁面中

7.創建一個觸摸事件,用來監聽按鈕所在的位置

8.創建drawSlide方法,用來限制滑塊的運行區間,防止滑塊劃出指定的區域,并限制按鈕只有兩個結果,開和關

9.根據drawSlide方法得到開關的結果,設置開關的狀態

10.根據開關的狀態設置開關中滑塊的位置

11設.置一個回調接口,用來監聽按鈕的狀態是否發生改變

布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context="com.example.a3_.MainActivity"><com.example.a3_.MyToggleButton  android:id="@+id/myToggle"  android:layout_width="wrap_content"  android:layout_height="wrap_content" /><com.example.a3_.MyToggleButton  android:id="@+id/myToggle2"  android:layout_width="wrap_content"  android:layout_height="wrap_content" /></LinearLayout>

核心代碼

package com.example.a3_;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends AppCompatActivity {private MyToggleButton toggleButton;private MyToggleButton toggleButton2;@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  //初始化控件  toggleButton = (MyToggleButton) findViewById(R.id.myToggle);  //設置按鈕的狀態  toggleButton.setToggleStste(true);  //創建一個監聽  MyListener myListener = new MyListener();  //設置監聽  toggleButton.setOnToggleStateChangedListener(myListener);  //初始化控件  toggleButton2 = (MyToggleButton) findViewById(R.id.myToggle2);  //設置按鈕的狀態  toggleButton2.setToggleStste(true);  //創建一個監聽  MyListener myListener2 = new MyListener();  //設置監聽  toggleButton2.setOnToggleStateChangedListener(myListener2);}//創建一個監聽class MyListener implements MyToggleButton.onToggleStateChangedListener {  @Override  public void onToggleStateChange(MyToggleButton button, boolean isToggleOn) {    //判定是哪個按鈕觸發了監聽    switch (button.getId()) {      case R.id.myToggle:        Toast.makeText(MainActivity.this, isToggleOn ? "開1" : "關1", Toast.LENGTH_SHORT).show();        break;      case R.id.myToggle2:        Toast.makeText(MainActivity.this, isToggleOn ? "開2" : "關2", Toast.LENGTH_SHORT).show();    }  }}}

自定義控件代碼

package com.example.a3_;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by Administrator on 2017.05.27.0027. */public class MyToggleButton extends View {private Bitmap bgBitmap;private Bitmap slidebg;private final int viewWidth;private final int viewheight;private float slidebgleft;private final int slideWidth;private final int slideMaxLeft;//設置一個成員變量,用來判定開關的狀態private boolean toggleStste = false;private boolean canChangeToggleState = false;private onToggleStateChangedListener monToggleStateChangedListener = null;//創建一個開關狀態改變的監聽,當狀態改變時觸發,否則不觸發public void setOnToggleStateChangedListener(onToggleStateChangedListener monToggleStateChangedListener) {  this.monToggleStateChangedListener = monToggleStateChangedListener;}public MyToggleButton(Context context, AttributeSet attrs) {  super(context, attrs);  //設置按鈕的背景和滑塊資源  setBackgroundAndSlideResource(R.mipmap.toogle_background, R.mipmap.toogle_slidebg);  //獲取背景的高度和寬度  viewWidth = bgBitmap.getWidth();  viewheight = bgBitmap.getHeight();  //背景的寬和高就是這個自定義按鈕的寬和高  //獲取滑塊的寬度  slideWidth = slidebg.getWidth();  //計算滑塊的右邊最大值  slideMaxLeft = viewWidth - slideWidth;}//定義一個方法,用來顯示按鈕是開還是關public void setToggleStste(boolean toggleStste) {  this.toggleStste = toggleStste;  if (toggleStste) {    slidebgleft = slideMaxLeft;  } else {    slidebgleft = 0;  }  //重新繪制  invalidate();}//設置按鈕的背景和滑塊資源private void setBackgroundAndSlideResource(int toogle_background, int toogle_slidebg) {  bgBitmap = BitmapFactory.decodeResource(getResources(), toogle_background);  slidebg = BitmapFactory.decodeResource(getResources(), toogle_slidebg);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//    super.onMeasure(widthMeasureSpec, heightMeasureSpec);  //調用setMeasuredDimension繪制按鈕的區域  setMeasuredDimension(viewWidth, viewheight);}@Overrideprotected void onDraw(Canvas canvas) {  //重寫drawBitmap,將控件的背景和滑塊繪制到頁面中  canvas.drawBitmap(bgBitmap, 0, 0, null);  drawSlide(canvas);}//通過控制slidebgleft,來控制滑塊的位置private void drawSlide(Canvas canvas) {  //限制滑塊的運行區間,防止滑塊移動到界外  if (slidebgleft < 0) {    slidebgleft = 0;  } else if (slidebgleft > slideMaxLeft) {    slidebgleft = slideMaxLeft;  }  canvas.drawBitmap(slidebg, slidebgleft, 0, null);  if (canChangeToggleState) {    canChangeToggleState = false;    //記錄上一次開關的狀態    boolean lastToggleState = toggleStste;    //根據當前滑塊的位置更新開關的狀態    if (slidebgleft == 0) {      toggleStste = false;    } else {      toggleStste = true;    }    //如果當前的狀態與上一次狀態不同時,才會觸發監聽事件    if (lastToggleState != toggleStste && monToggleStateChangedListener != null) {      monToggleStateChangedListener.onToggleStateChange(this, toggleStste);    }  }}//設置按鈕的觸摸事件@Overridepublic boolean onTouchEvent(MotionEvent event) {  switch (event.getAction()) {    case MotionEvent.ACTION_DOWN:      slidebgleft = event.getX() - slideWidth / 2;      break;    case MotionEvent.ACTION_MOVE:      slidebgleft = event.getX() - slideWidth / 2;      break;    case MotionEvent.ACTION_UP:      if (event.getX() > viewWidth / 2) {        slidebgleft = slideMaxLeft;      } else {        slidebgleft = 0;      }      //只有當手機離開屏幕的是否才可以觸發監聽      canChangeToggleState = true;      break;  }  //重復不斷地繪制  invalidate();  return true;}interface onToggleStateChangedListener {  void onToggleStateChange(MyToggleButton button, boolean isToggleOn);}}

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品综合网站| 欧美成人性生活| 精品国产乱码久久久久久天美| 亚洲精品久久久久久久久久久久久| 日韩av电影在线免费播放| 中文字幕亚洲一区二区三区| 欧美日韩中文在线观看| 欧美一级淫片aaaaaaa视频| 国产精品亚洲自拍| 亚洲片在线资源| 日韩av在线影院| 日韩中文字幕免费| 最新国产成人av网站网址麻豆| 久久综合久久美利坚合众国| 亚洲精品国精品久久99热一| 日韩美女主播视频| 欧美性猛交xxxx免费看久久久| 5566成人精品视频免费| 日本道色综合久久影院| 欧美性猛交xxxx黑人猛交| 日韩高清免费观看| 亚洲精品久久7777777| 久久91精品国产91久久久| 另类色图亚洲色图| 亚洲成人久久久| 91九色综合久久| 亚洲精品日韩激情在线电影| 日韩欧美精品网址| 国产丝袜视频一区| 777国产偷窥盗摄精品视频| 日韩精品免费在线视频| 亚洲图中文字幕| 亚洲色图校园春色| 一区二区成人av| 国产精品看片资源| 在线看片第一页欧美| 97精品在线观看| 国产欧美亚洲精品| 久久久精品在线观看| 国产精品91久久久久久| 日韩欧美精品网站| 97超视频免费观看| 久久久久亚洲精品成人网小说| 国产精品扒开腿做| 久久av红桃一区二区小说| xxxxx91麻豆| 亚洲精品aⅴ中文字幕乱码| 亚洲精品福利在线观看| 亚洲第一中文字幕在线观看| 国产综合在线视频| 久久91亚洲精品中文字幕奶水| 日本国产高清不卡| 国产精品视频永久免费播放| 中文字幕欧美精品在线| 精品爽片免费看久久| 中文字幕在线精品| 上原亚衣av一区二区三区| 亚洲图片欧美午夜| 国产精品一区二区三区毛片淫片| 国产精品日日摸夜夜添夜夜av| 91社影院在线观看| 97在线日本国产| 久久久久久久久综合| 亚洲性xxxx| 欧美xxxx18性欧美| 国产欧美亚洲视频| 精品精品国产国产自在线| 精品久久久久久中文字幕大豆网| 欧美性猛交xxxx富婆弯腰| 欧美性受xxx| 欧美激情一区二区三区高清视频| 国产精品爱久久久久久久| 久久人人爽人人爽人人片亚洲| 亚洲精品美女久久| 国产成人精品最新| 亚洲精品国偷自产在线99热| 久久免费少妇高潮久久精品99| 欧美视频中文字幕在线| 中文字幕九色91在线| 国产97色在线|日韩| 亚洲欧美一区二区三区在线| 欧美丰满少妇xxxxx| 国产综合在线看| 欧美丝袜美女中出在线| 国产亚洲人成网站在线观看| 国产亚洲精品久久久久久牛牛| 欧美又大又粗又长| 麻豆乱码国产一区二区三区| 最好看的2019年中文视频| 亚洲四色影视在线观看| 韩国三级电影久久久久久| 国产主播精品在线| 久久久久久噜噜噜久久久精品| 亚洲欧洲美洲在线综合| 国产精品国产三级国产aⅴ9色| 亚洲综合最新在线| 国产精品678| 日韩欧美中文字幕在线播放| 色综合久久久久久中文网| 欧美国产一区二区三区| 亚洲精品一区中文字幕乱码| 亚洲国产高清自拍| 97视频在线观看免费| 亚洲精品视频播放| 日韩在线不卡视频| 欧美性xxxx极品hd欧美风情| 亚洲精品av在线| 97精品伊人久久久大香线蕉| 久久久久久久久久国产| 亚洲r级在线观看| 亚洲电影天堂av| 国产成人精品综合久久久| 在线观看精品自拍私拍| 国产丝袜精品第一页| 欧美国产视频一区二区| 国产精品热视频| 欧美在线视频观看| 永久555www成人免费| 日韩黄色av网站| 国产精品视频区| 丝袜美腿亚洲一区二区| 亚洲精品美女在线观看| 国产精品美女视频网站| 国内偷自视频区视频综合| 亚洲mm色国产网站| 亚洲电影免费观看高清完整版| 国产精品中文在线| 国产精品视频免费观看www| 最近中文字幕mv在线一区二区三区四区| 91在线|亚洲| 91社区国产高清| 国产精品免费一区豆花| 日韩精品在线视频观看| 欧美一级黑人aaaaaaa做受| 国产日韩换脸av一区在线观看| 国产日韩欧美视频在线| 亚洲国产成人在线视频| 亚洲色图日韩av| 啊v视频在线一区二区三区| 黄色91在线观看| 黄网站色欧美视频| 国产日韩在线免费| 欧美美女15p| 欧美日韩成人精品| 日本a级片电影一区二区| 国模吧一区二区三区| 中文字幕亚洲一区二区三区五十路| 黑人巨大精品欧美一区二区| 97精品国产97久久久久久免费| 色无极影院亚洲| 国产日韩欧美视频在线| 亚洲欧美国产高清va在线播| 亚洲一区二区三区久久| 久久在线免费视频| 亚洲欧美日韩中文视频| 中文字幕久久精品| 欧美大学生性色视频| 尤物yw午夜国产精品视频| 91在线色戒在线| 成人国内精品久久久久一区| 国产精品第一视频| 国产91色在线|免| 欧美成人黑人xx视频免费观看| 成人在线观看视频网站|