日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android實現類似ios滑動按鈕

瀏覽:186日期:2022-09-17 09:14:22

IOS的滑動按鈕菜單在UI設計里面絕對堪稱一絕,在學習了Android的自定義view后,我萌生了模仿它的想法。

Android實現類似ios滑動按鈕

Android實現類似ios滑動按鈕

實現上面的模擬需要自定義一個View;

1)、在View的OnDraw里畫出圓角矩形,分別為灰色圓角矩形,紅色圓角矩形,和綠色圓角矩形。然后計算相應的位置。

2)、本例中的寬高比為1:0.65,內部紅色矩形尺寸為外部矩形尺寸0.9,內部的圓的半徑為外部高的0.45倍。按照這個比例計算相應的坐標。

3)、本例中的動畫是用ValueAnimation實現的,具體實現在下部代碼中。

4)、本例中的透明度實現方法和運動動畫一樣。

5)、自定義View為外部提供了讀取和修改內部狀態的接口。

具體代碼如下,

1、界面的XML代碼:

<?xml version='1.0' encoding='utf-8'?><RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' android: 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' tools:context='com.example.app_switchbutton.SwitchButtonActivity'> <com.example.app_switchbutton.switchbutton android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_alignParentTop='true' android:layout_alignParentStart='true' /> <com.example.app_switchbutton.switchbutton android:layout_width='100dp' android:layout_height='wrap_content' android:layout_centerHorizontal='true' android:layout_alignParentBottom='true'/> </RelativeLayout>

2、實現自定義view的java代碼:

package com.example.app_switchbutton; import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.RadioButton; /** * Created by 盡途 on 2017/4/26. */ public class switchbutton extends View { private int widthSize; private int heightSize; private boolean isOn=false; private float WhiteRoundRect_width,WhiteRoundRect_height; private float Circle_X,Circle_Y,WhiteRoundRect_X,WhiteRoundRect_Y; private float Radius; private float currentValue; private int currentAlphaofGreen,currentAlphaofGray; public switchbutton(Context context){ super(context); } public switchbutton(Context context, AttributeSet attributeSet){ super(context,attributeSet); setLayerType(LAYER_TYPE_SOFTWARE,null); initData(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { widthSize=MeasureSpec.getSize(widthMeasureSpec); heightSize=(int)(widthSize*0.65f); setMeasuredDimension(widthSize,heightSize); initData(); } void initData(){ if (isOn){ currentValue=widthSize-0.5f*heightSize; currentAlphaofGreen=255; currentAlphaofGray=0; } else { currentValue=0.5f*heightSize; currentAlphaofGreen=0; currentAlphaofGray=255; } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (isOn){ DrawBackGreenRoundRect(canvas); DrawCircle(canvas); } else { DrawBackGrayRoundRect(canvas); DrawBackWhiteRoundRect(canvas); DrawCircle(canvas); } } private void DrawBackGrayRoundRect(Canvas canvas){ Paint paint0=new Paint(); paint0.setStyle(Paint.Style.FILL); paint0.setColor(Color.GRAY); paint0.setAntiAlias(true); paint0.setAlpha(currentAlphaofGray); RectF roundRect=new RectF(0,0,widthSize,heightSize); canvas.drawRoundRect(roundRect,heightSize*0.5f,heightSize*0.5f,paint0); } private void DrawBackGreenRoundRect(Canvas canvas){ Paint paint1=new Paint(); paint1.setStyle(Paint.Style.FILL); paint1.setColor(Color.GREEN); paint1.setAntiAlias(true); paint1.setAlpha(currentAlphaofGreen); RectF roundRect=new RectF(0,0,widthSize,heightSize); canvas.drawRoundRect(roundRect,heightSize*0.5f,heightSize*0.5f,paint1); } private void DrawCircle(Canvas canvas){ Circle_Y=heightSize*0.5f; Radius=heightSize*0.45f; Paint paint2=new Paint(); paint2.setStyle(Paint.Style.FILL); paint2.setColor(Color.WHITE); paint2.setAntiAlias(true); canvas.drawCircle(currentValue,Circle_Y,Radius,paint2); } private void DrawBackWhiteRoundRect(Canvas canvas){ Paint paint3=new Paint(); paint3.setStyle(Paint.Style.FILL); paint3.setColor(Color.RED); paint3.setAntiAlias(true); paint3.setAlpha(currentAlphaofGray); WhiteRoundRect_X=heightSize*0.05f; WhiteRoundRect_Y=heightSize*0.05f; WhiteRoundRect_width=widthSize-0.05f*heightSize; WhiteRoundRect_height=heightSize*0.95f; RectF rectf=new RectF(WhiteRoundRect_X,WhiteRoundRect_Y,WhiteRoundRect_width,WhiteRoundRect_height); canvas.drawRoundRect(rectf,WhiteRoundRect_height*0.5f,WhiteRoundRect_height*0.5f,paint3); } /** * 添加了過渡值動畫,實現了平緩運動 * @param startValue * @param endValue */ private void setAnimation(float startValue,float endValue){ ValueAnimator valueAnimator=ValueAnimator.ofFloat(startValue,endValue); valueAnimator.setDuration(1500); valueAnimator.setTarget(currentValue); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) {currentValue=(float)animation.getAnimatedValue();invalidate(); } }); valueAnimator.start(); } private void setAlphaAnimationofGray(int startValue,int endValue){ ValueAnimator valueAnimator=ValueAnimator.ofInt(startValue,endValue); valueAnimator.setDuration(1500); valueAnimator.setTarget(currentAlphaofGray); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) {currentAlphaofGray=(int)animation.getAnimatedValue();invalidate(); } }); valueAnimator.start(); } private void setAlphaAnimationofGreen(int startValue,int endValue){ ValueAnimator valueAnimator=ValueAnimator.ofInt(startValue,endValue); valueAnimator.setDuration(1500); valueAnimator.setTarget(currentAlphaofGreen); valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) {currentAlphaofGreen=(int)animation.getAnimatedValue();invalidate(); } }); valueAnimator.start(); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN:return true; case MotionEvent.ACTION_MOVE:return false; case MotionEvent.ACTION_UP:isOn=!isOn;invalidate();break; default:break; } if (isOn){ float startCircle_X=0.5f*heightSize; float endCircle_X=widthSize-0.5f*heightSize; setAnimation(startCircle_X,endCircle_X); setAlphaAnimationofGray(255,0); setAlphaAnimationofGreen(0,255); }else { float startCircle_X=widthSize-0.5f*heightSize; float endCircle_X=heightSize*0.5f; setAnimation(startCircle_X,endCircle_X); setAlphaAnimationofGray(0,255); setAlphaAnimationofGreen(255,0); } return super.onTouchEvent(event); } public void writeSwitchButtonState(boolean isOn){ this.isOn=isOn; } public boolean readSwitchButtonState(){ return isOn; }}

模仿的不是很到位,請大家見諒。

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

標簽: IOS
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久免费| 国产精品入口久久| 日韩精品一区二区三区中文字幕| 蜜臀av一区二区在线免费观看 | 最新中文字幕在线播放| 91在线成人| 欧美一区免费| 精品免费视频| 国内精品亚洲| 国产精品一区二区三区av麻| 久久国产精品美女| 欧美天堂一区| 久久精品99久久久| 视频精品一区二区| 中文字幕av一区二区三区人| 99视频在线精品国自产拍免费观看| 天堂av在线一区| 丝瓜av网站精品一区二区| 99日韩精品| 日本va欧美va瓶| 激情中国色综合| 日韩精品一区二区三区免费观看| 九色porny丨国产首页在线| 久久久国产精品网站| 免费一二一二在线视频| 九九综合在线| 蜜桃国内精品久久久久软件9| 黄色成人在线网址| 狠狠干成人综合网| 欧美在线91| 成人日韩av| 婷婷激情图片久久| 亚洲91网站| 精品国产18久久久久久二百| 成人日韩在线| 日韩福利在线观看| 久久精品高清| 国产乱论精品| а√天堂中文在线资源8| 在线成人动漫av| 日韩精品一区二区三区中文| 欧美日韩一区自拍| 免费在线日韩av| 好吊日精品视频| 日本午夜精品久久久| 久久在线91| 男女精品网站| 久久婷婷亚洲| 欧美激情aⅴ一区二区三区| 亚洲激情社区| 精品美女在线视频| 欧美日韩精品一本二本三本| 国产精品久久久久久模特| 超级白嫩亚洲国产第一| 国产伊人精品| 精品美女久久| 午夜精品婷婷| 精品国产一区二| 国产精品一区二区三区美女 | 欧美久久一区二区三区| 亚洲一级高清| 激情黄产视频在线免费观看| 99国产精品自拍| 蜜桃av.网站在线观看| 久久精品理论片| 国产精品一区毛片| 国产精品久久久久久久久免费高清 | 国产精品1区| 日本欧美在线看| 热久久国产精品| 午夜在线视频观看日韩17c| 国产字幕视频一区二区| 日韩久久精品网| 亚洲精品在线影院| 亚洲精品在线影院| 久久国产小视频| 欧美日韩日本国产亚洲在线| 99热精品在线| 亚洲影视一区二区三区| 四虎在线精品| 国产精品亚洲人成在99www| 噜噜噜久久亚洲精品国产品小说| 国产亚洲毛片| 亚洲一区日本| 婷婷亚洲成人| 国产麻豆一区二区三区精品视频| 久久精品国产亚洲一区二区三区| 久久久国产精品网站| 成人在线免费观看网站| 久久久久久久久久久9不雅视频| 久久一区二区中文字幕| 亚洲激情不卡| 视频一区二区三区在线| 日韩专区在线视频| 色综合视频一区二区三区日韩| 国产精品www994| 国产精品黑丝在线播放| 免费视频亚洲| 国产精品夜夜夜| 国产理论在线| 综合在线一区| 欧美视频精品全部免费观看| 日韩激情中文字幕| 伊人精品一区| 欧美激情福利| 激情中国色综合| 国产中文字幕一区二区三区| 久久国产精品免费精品3p | 中文一区一区三区免费在线观 | 日本精品在线中文字幕| 久久久精品久久久久久96 | 久久国产乱子精品免费女| 成人亚洲精品| 麻豆久久久久久| 欧美日韩四区| 中文在线资源| 国产麻豆精品久久| 亚洲a级精品| 亚洲精品影视| 午夜欧美巨大性欧美巨大| 国语精品一区| 国产一区清纯| 伊人国产精品| 欧美亚洲自偷自偷| 青草久久视频| 国产精品777777在线播放| 国产一区二区三区四区五区传媒| 里番精品3d一二三区| 欧美天堂在线| 久久精品女人| 久久久亚洲欧洲日产| 国产精品白浆| 丁香六月综合| 国产中文欧美日韩在线| 亚洲区国产区| 亚洲免费在线| 国产精品毛片在线| 日韩午夜精品| 亚洲三级在线| 国产精品任我爽爆在线播放 | 亚洲一区欧美二区| 精品国产一区二区三区2021| 亚洲影院天堂中文av色| 亚洲精品视频一二三区| 麻豆理论在线观看| 国产亚洲高清在线观看| 国产精品免费大片| 91精品1区| 香蕉成人av| 久久精品卡一| 国产欧美激情| 亚洲伦乱视频| 国产高潮在线| 女同性一区二区三区人了人一| 精品一区av| 精品香蕉视频| 丝袜a∨在线一区二区三区不卡| 亚洲aa在线| 久久精品国产99国产精品| 欧美激情另类| 在线国产日韩| 国产一区福利| 午夜国产欧美理论在线播放| 日产精品一区| 久久婷婷av| 精品一区欧美| 91嫩草精品| 亚洲免费资源| 免费日韩精品中文字幕视频在线| 国产一区国产二区国产三区| 国产一区亚洲| 一本色道久久精品| 欧美性感美女一区二区| 99在线观看免费视频精品观看| 国产精品一区二区av日韩在线| 狠狠爱成人网| 日本免费新一区视频| 国产一区三区在线播放| 国产欧美高清视频在线| 欧美激情国产在线| 午夜久久久久| 亚洲午夜黄色| 婷婷综合社区| 天堂成人免费av电影一区| 亚洲香蕉久久| 日韩精品a在线观看91| 鲁大师成人一区二区三区| 麻豆精品91| 国产亚洲精品自拍| 99精品电影| 亚洲综合不卡| 日韩中文字幕一区二区高清99| 欧美综合另类| 中文字幕一区二区三区四区久久| 国产一区二区色噜噜| 久久不射网站| 日本亚洲视频| 日韩综合精品| 亚洲精品a级片| 丝袜亚洲精品中文字幕一区|