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

首頁 > 系統 > Android > 正文

Android 仿蘋果IOS6開關按鈕

2019-10-23 20:08:50
字體:
來源:轉載
供稿:網友

先給大家展示下效果圖:

android仿ios開關按鈕,android,仿ios6開關

不知道大家對效果圖感覺怎么樣,個人覺還不錯,感興趣的朋友可以參考下實現代碼哦。

public class ToggleButton extends View {private SpringSystem springSystem;private Spring spring ;/** */private float radius;/** 開啟顏色*/private int onColor = Color.parseColor("#4ebb7f");/** 關閉顏色*/private int offBorderColor = Color.parseColor("#dadbda");/** 灰色帶顏色*/private int offColor = Color.parseColor("#ffffff");/** 手柄顏色*/private int spotColor = Color.parseColor("#ffffff");/** 邊框顏色*/private int borderColor = offBorderColor;/** 畫筆*/private Paint paint ;/** 開關狀態*/private boolean toggleOn = false;/** 邊框大小*/private int borderWidth = 2;/** 垂直中心*/private float centerY;/** 按鈕的開始和結束位置*/private float startX, endX;/** 手柄X位置的最小和最大值*/private float spotMinX, spotMaxX;/**手柄大小 */private int spotSize ;/** 手柄X位置*/private float spotX;/** 關閉時內部灰色帶高度*/private float offLineWidth;/** */private RectF rect = new RectF();/** 默認使用動畫*/private boolean defaultAnimate = true;/** 是否默認處于打開狀態*/private boolean isDefaultOn = false;private OnToggleChanged listener;private ToggleButton(Context context) {super(context);}public ToggleButton(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);setup(attrs);}public ToggleButton(Context context, AttributeSet attrs) {super(context, attrs);setup(attrs);}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();spring.removeListener(springListener);}public void onAttachedToWindow() {super.onAttachedToWindow();spring.addListener(springListener);}public void setup(AttributeSet attrs) {paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setStyle(Style.FILL);paint.setStrokeCap(Cap.ROUND);springSystem = SpringSystem.create();spring = springSystem.createSpring();spring.setSpringConfig(SpringConfig.fromOrigamiTensionAndFriction(50, 7));this.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {toggle(defaultAnimate);}});TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ToggleButton);offBorderColor = typedArray.getColor(R.styleable.ToggleButton_tbOffBorderColor, offBorderColor);onColor = typedArray.getColor(R.styleable.ToggleButton_tbOnColor, onColor);spotColor = typedArray.getColor(R.styleable.ToggleButton_tbSpotColor, spotColor);offColor = typedArray.getColor(R.styleable.ToggleButton_tbOffColor, offColor);borderWidth = typedArray.getDimensionPixelSize(R.styleable.ToggleButton_tbBorderWidth, borderWidth);defaultAnimate = typedArray.getBoolean(R.styleable.ToggleButton_tbAnimate, defaultAnimate);isDefaultOn = typedArray.getBoolean(R.styleable.ToggleButton_tbAsDefaultOn, isDefaultOn);typedArray.recycle();borderColor = offBorderColor;if (isDefaultOn) {toggleOn();}}public void toggle() {toggle(true);}public void toggle(boolean animate) {toggleOn = !toggleOn;takeEffect(animate);if(listener != null){listener.onToggle(toggleOn);}}public void toggleOn() {setToggleOn();if(listener != null){listener.onToggle(toggleOn);}}public void toggleOff() {setToggleOff();if(listener != null){listener.onToggle(toggleOn);}}/*** 設置顯示成打開樣式,不會觸發toggle事件*/public void setToggleOn() {setToggleOn(true);}/*** @param animate asd*/public void setToggleOn(boolean animate){toggleOn = true;takeEffect(animate);}/*** 設置顯示成關閉樣式,不會觸發toggle事件*/public void setToggleOff() {setToggleOff(true);}public void setToggleOff(boolean animate) {toggleOn = false;takeEffect(animate);}private void takeEffect(boolean animate) {if(animate){spring.setEndValue(toggleOn ? 1 : 0);}else{//這里沒有調用spring,所以spring里的當前值沒有變更,這里要設置一下,同步兩邊的當前值spring.setCurrentValue(toggleOn ? 1 : 0);calculateEffect(toggleOn ? 1 : 0);}}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {final int widthMode = MeasureSpec.getMode(widthMeasureSpec);final int heightMode = MeasureSpec.getMode(heightMeasureSpec);int widthSize = MeasureSpec.getSize(widthMeasureSpec);int heightSize = MeasureSpec.getSize(heightMeasureSpec);Resources r = Resources.getSystem();if(widthMode == MeasureSpec.UNSPECIFIED || widthMode == MeasureSpec.AT_MOST){widthSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, r.getDisplayMetrics());widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.EXACTLY);}if(heightMode == MeasureSpec.UNSPECIFIED || heightSize == MeasureSpec.AT_MOST){heightSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30, r.getDisplayMetrics());heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.EXACTLY);}super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right,int bottom) {super.onLayout(changed, left, top, right, bottom);final int width = getWidth();final int height = getHeight();radius = Math.min(width, height) * 0.5f;centerY = radius;startX = radius;endX = width - radius;spotMinX = startX + borderWidth;spotMaxX = endX - borderWidth;spotSize = height - 4 * borderWidth;spotX = toggleOn ? spotMaxX : spotMinX;offLineWidth = 0;}SimpleSpringListener springListener = new SimpleSpringListener(){@Overridepublic void onSpringUpdate(Spring spring) {final double value = spring.getCurrentValue();calculateEffect(value);}};private int clamp(int value, int low, int high) {return Math.min(Math.max(value, low), high);}@Overridepublic void draw(Canvas canvas) {//rect.set(0, 0, getWidth(), getHeight());paint.setColor(borderColor);canvas.drawRoundRect(rect, radius, radius, paint);if(offLineWidth > 0){final float cy = offLineWidth * 0.5f;rect.set(spotX - cy, centerY - cy, endX + cy, centerY + cy);paint.setColor(offColor);canvas.drawRoundRect(rect, cy, cy, paint);}rect.set(spotX - 1 - radius, centerY - radius, spotX + 1.1f + radius, centerY + radius);paint.setColor(borderColor);canvas.drawRoundRect(rect, radius, radius, paint);final float spotR = spotSize * 0.5f;rect.set(spotX - spotR, centerY - spotR, spotX + spotR, centerY + spotR);paint.setColor(spotColor);canvas.drawRoundRect(rect, spotR, spotR, paint);}/*** @param value*/private void calculateEffect(final double value) {final float mapToggleX = (float) SpringUtil.mapValueFromRangeToRange(value, 0, 1, spotMinX, spotMaxX);spotX = mapToggleX;float mapOffLineWidth = (float) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, 10, spotSize);offLineWidth = mapOffLineWidth;final int fb = Color.blue(onColor);final int fr = Color.red(onColor);final int fg = Color.green(onColor);final int tb = Color.blue(offBorderColor);final int tr = Color.red(offBorderColor);final int tg = Color.green(offBorderColor);int sb = (int) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, fb, tb);int sr = (int) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, fr, tr);int sg = (int) SpringUtil.mapValueFromRangeToRange(1 - value, 0, 1, fg, tg);sb = clamp(sb, 0, 255);sr = clamp(sr, 0, 255);sg = clamp(sg, 0, 255);borderColor = Color.rgb(sr, sg, sb);postInvalidate();}/*** @author ThinkPad**/public interface OnToggleChanged{/*** @param on = =*/public void onToggle(boolean on);}public void setOnToggleChanged(OnToggleChanged onToggleChanged) {listener = onToggleChanged;}public boolean isAnimate() {return defaultAnimate;}public void setAnimate(boolean animate) {this.defaultAnimate = animate;}}

別忘了自定義屬性:attrs.xml

<?xml version="1.0" encoding="utf-8"?><resources><declare-styleable name="ToggleButton"><attr name="tbBorderWidth" format="dimension"/><attr name="tbOffBorderColor" format="reference|color"/><attr name="tbOffColor" format="reference|color"/><attr name="tbOnColor" format="reference|color"/><attr name="tbSpotColor" format="reference|color"/><attr name="tbAnimate" format="reference|boolean"/><attr name="tbAsDefaultOn" format="reference|boolean"/></declare-styleable></resources>

main.xml

<?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:layout_width="match_parent"android:layout_height="match_parent"xmlns:toggle="http://schemas.android.com/apk/res-auto"android:orientation="vertical"><LinearLayoutandroid:layout_marginTop="10dp"android:layout_width="match_parent"android:gravity="center_horizontal"android:layout_height="wrap_content"><com.example.ekikousei.view.ToggleButtonandroid:id="@+id/mToggleButton01"android:layout_width="54dp"android:layout_height="30dp"></com.example.ekikousei.view.ToggleButton></LinearLayout><LinearLayoutandroid:layout_marginTop="10dp"android:layout_width="match_parent"android:gravity="center_horizontal"android:layout_height="wrap_content"><com.example.ekikousei.view.ToggleButtonandroid:id="@+id/mToggleButton02"android:layout_width="54dp"android:layout_height="30dp"toggle:tbBorderWidth="2dp"toggle:tbOffBorderColor="#000"toggle:tbOffColor="#ddd"toggle:tbOnColor="#f00"toggle:tbSpotColor="#00f"></com.example.ekikousei.view.ToggleButton></LinearLayout></LinearLayout>

Maintivity

public class MainActivity extends Activity {private ToggleButton mToggleButton01;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mToggleButton01 = (ToggleButton) findViewById(R.id.mToggleButton01);mToggleButton01.setOnToggleChanged(new ToggleButton.OnToggleChanged() {@Overridepublic void onToggle(boolean on) {if (on) {Toast.makeText(MainActivity.this, "打開", Toast.LENGTH_SHORT).show();}else {Toast.makeText(MainActivity.this, "默認關閉", Toast.LENGTH_SHORT).show();}}});}}

猛戳這里:studio點擊下載

以上所述是小編給大家介紹的Android 之仿蘋果IOS6開關按鈕,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩在线播放| 国产精品久久久久久av福利软件| 久久久999精品免费| 海角国产乱辈乱精品视频| 97碰碰碰免费色视频| 欧美极品在线播放| 亚洲午夜性刺激影院| 久久在线免费视频| 日本a级片电影一区二区| 国产精品美女视频网站| 亚洲视频777| 日韩激情在线视频| 国产精品久久色| 精品美女久久久久久免费| 国产精品视频在线观看| 亚洲精品一区在线观看香蕉| 欧美亚洲日本网站| 中文字幕欧美日韩va免费视频| 国外成人免费在线播放| 不卡伊人av在线播放| 欧美在线免费观看| 亚洲欧美日韩精品久久亚洲区| 亚洲自拍高清视频网站| 亚洲成人精品久久久| 国产一区二区三区四区福利| 国产日韩欧美在线视频观看| 国产成人自拍视频在线观看| 日韩视频中文字幕| 91亚洲精品一区二区| 色yeye香蕉凹凸一区二区av| 欧美亚洲国产日韩2020| 欧美视频免费在线观看| 91成人在线播放| 亚洲色图激情小说| 亚洲欧美www| 国产精品视频一| 91亚洲精品久久久久久久久久久久| 亚洲自拍在线观看| 97精品视频在线播放| 欧美色视频日本版| 亚洲码在线观看| www.亚洲一二| 色视频www在线播放国产成人| 国产日韩精品在线播放| 俺去了亚洲欧美日韩| 成人激情视频免费在线| 深夜成人在线观看| 日韩中文字幕在线播放| 上原亚衣av一区二区三区| 欧美日韩人人澡狠狠躁视频| 九色精品免费永久在线| 亚洲精品一区中文| 欧美丰满少妇xxxxx| 亚洲资源在线看| 久久这里有精品视频| 亚洲综合日韩中文字幕v在线| 国内精品免费午夜毛片| 国产精品户外野外| 国产精品黄色影片导航在线观看| 一本一道久久a久久精品逆3p| 欧美视频免费在线| 国内成人精品一区| 亚洲а∨天堂久久精品9966| 91福利视频在线观看| 日韩中文字幕网址| 91精品视频在线免费观看| 国产精品免费视频久久久| 精品视频在线播放| 91美女福利视频高清| 在线播放国产精品| 色久欧美在线视频观看| 96sao精品视频在线观看| 日韩中文av在线| 在线精品国产成人综合| 国产精品久久久久久网站| 欧美三级欧美成人高清www| 欧美中文字幕第一页| 不卡伊人av在线播放| 国产精品va在线播放我和闺蜜| 久久久久国产视频| 亚洲电影成人av99爱色| 成人一区二区电影| 亚洲精品www久久久| 视频直播国产精品| 久久影视免费观看| 日韩亚洲欧美中文高清在线| 国产成人精品在线观看| 成人在线播放av| 26uuu久久噜噜噜噜| 色婷婷亚洲mv天堂mv在影片| 疯狂做受xxxx欧美肥白少妇| 97av在线视频免费播放| 国产成人高潮免费观看精品| 国产精品免费观看在线| 国产成人激情视频| 久久精品久久久久电影| 亚洲一区二区三区在线免费观看| 国产精品国产福利国产秒拍| 亚洲老头同性xxxxx| 亚洲第一区在线观看| 欧美日韩国产一区二区| 欧美成人黑人xx视频免费观看| 日韩精品久久久久久福利| 亚洲综合小说区| 欧美在线一级视频| 久久久久久久久久久免费| 国产精品日韩欧美| 精品成人69xx.xyz| 国产一区二区色| 国产亚洲成精品久久| 日韩精品高清视频| 日韩电影免费在线观看中文字幕| 91免费看国产| 丝袜亚洲另类欧美重口| 日本高清久久天堂| 国产亚洲视频在线| 一区二区三区视频免费在线观看| 欧美极品少妇xxxxⅹ喷水| 久久精品99国产精品酒店日本| 亚洲国产天堂久久国产91| 欧美麻豆久久久久久中文| 国产精品91久久久| 国产一区二区三区免费视频| 欧美色欧美亚洲高清在线视频| 国产精品白丝jk喷水视频一区| 欧美在线视频一二三| 亚洲视频在线免费看| 国产精品丝袜久久久久久不卡| 日韩成人中文电影| 色噜噜久久综合伊人一本| 国产精品午夜视频| 最新国产成人av网站网址麻豆| 久久中文久久字幕| 九九久久综合网站| 欧美黑人巨大xxx极品| 91综合免费在线| 中文字幕欧美国内| 亚洲区在线播放| 国产视频在线观看一区二区| 亚洲欧美综合图区| 国产美女精彩久久| 国产精品中文字幕在线观看| 成人xxxx视频| 国产日本欧美一区| 久久艳片www.17c.com| 日韩风俗一区 二区| 91青草视频久久| 亚洲欧美日韩在线高清直播| 欧美特级www| 精品国产91久久久久久老师| 国产成人精品久久亚洲高清不卡| 日韩在线小视频| 久久精品视频在线观看| 欧美日韩国产成人高清视频| 精品国产一区二区三区四区在线观看| 日韩精品中文字幕久久臀| 日韩美女视频免费在线观看| 久久精品国产精品| 青草热久免费精品视频| 国产精品精品视频一区二区三区| 久久精彩免费视频| 日韩中文字幕国产精品| 亚洲韩国日本中文字幕| 日产日韩在线亚洲欧美|