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

首頁 > 系統(tǒng) > Android > 正文

Android自定義實現(xiàn)可滑動按鈕

2019-10-21 21:26:14
字體:
來源:轉載
供稿:網(wǎng)友

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

實現(xiàn)邏輯

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

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

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

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

5.獲取滑塊的寬度,用來調(diào)整按鈕的開和關

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

7.創(chuàng)建一個觸摸事件,用來監(jiān)聽按鈕所在的位置

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

9.根據(jù)drawSlide方法得到開關的結果,設置開關的狀態(tài)

10.根據(jù)開關的狀態(tài)設置開關中滑塊的位置

11設.置一個回調(diào)接口,用來監(jiān)聽按鈕的狀態(tài)是否發(fā)生改變

布局文件

<?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);  //設置按鈕的狀態(tài)  toggleButton.setToggleStste(true);  //創(chuàng)建一個監(jiān)聽  MyListener myListener = new MyListener();  //設置監(jiān)聽  toggleButton.setOnToggleStateChangedListener(myListener);  //初始化控件  toggleButton2 = (MyToggleButton) findViewById(R.id.myToggle2);  //設置按鈕的狀態(tài)  toggleButton2.setToggleStste(true);  //創(chuàng)建一個監(jiān)聽  MyListener myListener2 = new MyListener();  //設置監(jiān)聽  toggleButton2.setOnToggleStateChangedListener(myListener2);}//創(chuàng)建一個監(jiān)聽class MyListener implements MyToggleButton.onToggleStateChangedListener {  @Override  public void onToggleStateChange(MyToggleButton button, boolean isToggleOn) {    //判定是哪個按鈕觸發(fā)了監(jiān)聽    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;//設置一個成員變量,用來判定開關的狀態(tài)private boolean toggleStste = false;private boolean canChangeToggleState = false;private onToggleStateChangedListener monToggleStateChangedListener = null;//創(chuàng)建一個開關狀態(tài)改變的監(jiān)聽,當狀態(tài)改變時觸發(fā),否則不觸發(fā)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);  //調(diào)用setMeasuredDimension繪制按鈕的區(qū)域  setMeasuredDimension(viewWidth, viewheight);}@Overrideprotected void onDraw(Canvas canvas) {  //重寫drawBitmap,將控件的背景和滑塊繪制到頁面中  canvas.drawBitmap(bgBitmap, 0, 0, null);  drawSlide(canvas);}//通過控制slidebgleft,來控制滑塊的位置private void drawSlide(Canvas canvas) {  //限制滑塊的運行區(qū)間,防止滑塊移動到界外  if (slidebgleft < 0) {    slidebgleft = 0;  } else if (slidebgleft > slideMaxLeft) {    slidebgleft = slideMaxLeft;  }  canvas.drawBitmap(slidebg, slidebgleft, 0, null);  if (canChangeToggleState) {    canChangeToggleState = false;    //記錄上一次開關的狀態(tài)    boolean lastToggleState = toggleStste;    //根據(jù)當前滑塊的位置更新開關的狀態(tài)    if (slidebgleft == 0) {      toggleStste = false;    } else {      toggleStste = true;    }    //如果當前的狀態(tài)與上一次狀態(tài)不同時,才會觸發(fā)監(jiān)聽事件    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;      }      //只有當手機離開屏幕的是否才可以觸發(fā)監(jiān)聽      canChangeToggleState = true;      break;  }  //重復不斷地繪制  invalidate();  return true;}interface onToggleStateChangedListener {  void onToggleStateChange(MyToggleButton button, boolean isToggleOn);}}

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


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
中文字幕亚洲精品在线观看| 国产欧美日韩小视频| 一区二区三区四区精品视频| 天天骑夜夜操| 在线观看日韩国产| 欧美成人高清电影在线| 一区二区三区成人| 午夜电影一区二区| 97在线公开视频| 久久91亚洲精品中文字幕奶水| 青青国产在线观看| 国产剧情久久久久久| 国产剧情在线| 久久久久亚洲av无码专区首jn| 96久久久久久| 国产精品1区2区3区| 91精品国产91久久久久久一区二区| 国产一区免费在线| 欧美另类老女人| 欧美视频福利| 强制捆绑调教一区二区| 久草免费在线视频观看| 波多野结衣av一区二区全免费观看| 希岛爱理一区二区三区| 国产欧美激情视频| www.久色| 国产精品三级一区二区| 男人插女人视频在线观看| av在线资源观看| 天天摸天天舔天天操| 美女视频网站在线观看| 国产精品久久久久aaaa九色| 天天摸日日操| 欧美成人xxx| 国产乱码久久久久| 国产视频二区| 国产尤物视频在线观看| 呦呦在线视频| 久久精品www| 色综合久久88色综合天天提莫| av资源久久| 3dmax动漫人物在线看| 日韩一区二区不卡视频| 不卡的在线视频| 国产又粗又硬视频| 91精品婷婷国产综合久久蝌蚪| 精品嫩草影院| 精品99久久| 免费看一级黄色| 国产精品久久久久久久久久精爆| freehdxxxx| 免费看裸体网站| 色老综合老女人久久久| 国产一区二区三区四区五区3d| eeuss草民免费| 亚洲天堂av一区| 成人情趣视频| 免费日本黄色网址| 欧美一区二区福利| 久久中文字幕无码| 国产精品一区高清| 1024在线视频| 国产1区2区视频| 欧美日韩精品二区第二页| 性欧美激情精品| 激情婷婷亚洲| 国产在线欧美日韩| 欲香欲色天天天综合和网| 91视频久色| 亚洲精品天堂在线| 中文字幕一二三| 日韩av片子| 成人国产精品免费观看视频| 欧美xoxoxo| 欧美乱妇40p| 国产午夜精品视频免费不卡69堂| 18精品爽国产三级网站| 欧美在线免费视屏| 激情视频在线播放| 欧美中文字幕视频在线观看| 欧美性猛交xxxx偷拍洗澡| 国产欧美一区二区三区精品酒店| 国产美女高潮视频| 欧美激情极品视频| 26uuu另类欧美亚洲曰本| 午夜婷婷在线观看| 亚洲乱码国产乱码精品精| 韩日精品一区| 久久久久久久| 7777精品伊人久久久大香线蕉完整版| 国产麻豆视频免费观看| 91麻豆精品国产91久久久使用方法| 精品国产sm最大网站| 国产激情91久久精品导航| 国产在线一区不卡| 伊人久久青青草| 精品少妇爆乳无码av无码专区| 狠狠97人人婷婷五月| 激情综合自拍| 中文字幕在线看人| 国产精品一区hongkong| 国内自拍视频在线观看| 中文写幕一区二区三区免费观成熟| 国产精品日本一区二区| 青青草这里只有精品| 一区三区二区视频| 日韩精品一区二区三区久久| y111111国产精品久久久| 视频一区视频二区中文| 99久在线精品99re8热| 日产中文字幕在线精品一区| 欧美精品在线一区二区| 国产成人精品三级高清久久91| 国产中文在线播放| 成人免费av资源| 99国产精品久久久久久| 免费看污网站| 最新中文字幕一区二区三区| 超碰一区二区| 欧美一级淫片007| 欧美大片免费观看在线观看网站推荐| 日本免费不卡| 北条麻妃av毛片免费观看| 色哟哟中文字幕| 欧美精品99久久久| 亚洲第一页在线视频| 亚洲欧美日韩精品一区| 性中国xxx极品hd| 欧美午夜在线观看| 日韩pacopacomama| 国产成人福利av| 国产在线观看网站| 爽爽窝窝午夜精品一区二区| 国产探花视频在线| 久草中文在线观看| 成人mm视频在线观看| 日韩一区二区三区在线观看| 91精品福利视频| 北条麻妃在线视频| 一本一道综合狠狠老| 久久不射影院| 77777影视视频在线观看| 天天堂资源网在线观看免费视频| 久久久久久久一区二区三区| 性欧美hd调教| 成人永久免费视频| av在线资源站| av电影在线地址| 欧美97人人模人人爽人人喊视频| 日韩精品亚洲aⅴ在线影院| 国产高清第一页| 性欧美18一19sex性欧美| 成人免费视频77777| 91国偷自产一区二区三区成为亚洲经典| 成品人视频ww入口| 360天大佬第二季在线观看| 中文在线播放| 久久精品国产亚洲一区二区三区| 5566av亚洲| 日韩一区二区三区四区五区| 中文在线字幕免费观| 成人在线观看黄色| 欧美日本韩国一区二区三区| 9l视频自拍蝌蚪9l视频成人| 一区二区三区在线影院| 伊伊综合在线| 欧美二区在线播放| 韩国三级在线观看久| 一区二区三区偷拍| 成人丝袜18视频在线观看| 岛国片免费看| 久久av一区二区三区亚洲| 狠狠做深爱婷婷综合一区| 伊人久久综合网另类网站| 国产精品第一国产精品| 国产又黄又爽又无遮挡| a级片免费在线观看| 福利视频一区| 亚洲r级在线视频| 99在线视频精品| 国产成人a级片| 欧美brazzers| 一区二区在线播放视频| 免费无码国产精品| 爱豆国产剧免费观看大全剧苏畅| 日本中文视频| 激情久久一区二区| 青青草精品视频在线| 中文字幕在线视频免费观看| 天天av天天翘天天综合网色鬼国产| 欧美丝袜自拍制服另类| 国产三区二区一区久久| 老熟妇精品一区二区三区| 国产91精品在线观看| 亚洲中国最大av网站| 一级片免费在线观看| 国产成人一级片| 先锋影音av网站| 精品美女久久| 极品日韩av| aa级大片免费在线观看| 中文字幕一区二区三| 生活片a∨在线观看| 精品中国亚洲| 国产精品极品美女在线观看免费| 一级欧美一级日韩片| 久久久一本精品| 亚洲精品一线二线三线无人区| 国产精品网址在线| 午夜精品福利在线观看| 欧美在线一级va免费观看| 91美女片黄在线观看| 性xxxxbbbb| 久久中文字幕二区| 夜色av.com| 国产原创精品在线| 99久久国产综合精品成人影院| 亚洲最新在线| 日韩精品一区二区三区免费观看| 最新国产热播激情视频| 国产精品成人久久电影| 成人在线观看免费播放| 欧美日韩视频在线播放| 国产精品wwwwww| 欧美一区二区三区四区夜夜大片| 1插菊花综合| 日韩高清欧美高清| 国产一区二区毛片| 国产美女18xxxx免费视频| 欧美精品一区免费| 蜜桃成人免费视频| 日本一级片免费| 第九色区av在线| 一区二区三国产精华液| 久久色免费在线视频| 久久野战av| 男人操女人下面视频| 久久久国产精品一区二区三区| 欧美日韩大片免费观看| 在线看黄色av| 在线视频不卡一区二区三区| 伊人久久综合97精品| 婷婷在线播放| 久久久久亚洲精品一区二区三区| 欧美巨乳美女视频| 精品久久久久久中文字幕| 中文字幕一区二区在线观看视频| 国产综合欧美| 日本三级黄色大片| 日韩av综合中文字幕| 啪啪av大全导航福利综合导航| 五月天亚洲激情| 韩国av免费在线| 日韩精品1区2区3区| 国产精品久久久久影院| 男人天堂午夜在线| 激情婷婷综合网| av一区二区三区四区电影| 成人综合网址| 午夜精品久久久久久久爽| 欧美国产美女| 人人草在线观看| 黄色片视频在线观看| 午夜影院免费版| 亚洲天堂手机在线| 亚洲欧美bt| 欧美性视频在线播放| 精品人妻互换一区二区三区| 日本伊人精品一区二区三区观看方式| 日韩电影免费在线看| 影音av资源| 性久久久久久久久久| 成人欧美一区二区三区1314| 91av成人在线| 欧美大交乱xxxxbbbb| 欧美在线视频第一页| av小说在线| 青青青国产精品| 美洲天堂一区二卡三卡四卡视频| 日本一区免费观看| 免费视频一区二区| 国产1区在线观看| 亚洲男女自偷自拍| 美女福利一区| 久久精品www人人爽人人| 欧美国产高清| 青青草视频导航| www.精品久久| 欧美大片顶级少妇| 久久免费精品日本久久中文字幕| 夜夜嗨网站十八久久| 依依成人综合视频| 强迫凌虐淫辱の牝奴在线观看| h短视频大全在线观看| 免费看91的网站| 亚洲精品人成网在线播放影院| 亚洲在线激情| 国产视频精品久久久| 欧美三级第一页| 亚洲人精品午夜在线观看| 国产女主播在线写真| 真实乱偷全部视频| 好吊一区二区三区| 亚洲高清成人影院| 国产偷窥洗澡视频| 国产精品看片你懂得| 中文字幕一区二区三区乱码在线| xxxxwwww欧美| 男人添女人下部高潮视频在观看| jizzjizz大全| 婷婷综合视频| 香蕉久久夜色精品| 男人添女人下面高潮视频| 在线影视一区二区三区| 国产视频在线观看视频| 91久久精品日日躁夜夜躁国产| 自拍偷拍亚洲天堂| 久久久久久久999| 亚洲精品成人自拍| 超碰人人草人人| 超碰在线免费看| 日韩国产成人精品| 丰满少妇久久久| 欧洲一区在线电影| 三区视频在线观看| 老司机亚洲精品一区二区| 欧美xxx在线| 国产美女在线一区二区三区|