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

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

Android自定義view實現倒計時控件

瀏覽:173日期:2022-09-22 08:36:45

本文實例為大家分享了Android自定義view實現倒計時控件的具體代碼,供大家參考,具體內容如下

Android自定義view實現倒計時控件

Android自定義view實現倒計時控件

直接上代碼

自定義TextView

文字展示

public class StrokeTextView extends TextView { private TextView borderText = null;///用于描邊的TextView private Context mContext; public StrokeTextView(Context context) { super(context); mContext = context; borderText = new TextView(context); init(); } public StrokeTextView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; borderText = new TextView(context, attrs); init(); } public StrokeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context; borderText = new TextView(context, attrs, defStyle); init(); } public void init() { TextPaint tp1 = borderText.getPaint(); tp1.setStrokeWidth(12); //設置描邊寬度 tp1.setStyle(Paint.Style.STROKE);//對文字只描邊 //設置自定義字體 Typeface fromAsset = Typeface.createFromAsset(mContext.getAssets(), 'fonts/Alibaba-PuHuiTi-Heavy.ttf'); borderText.setTypeface(fromAsset, Typeface.ITALIC); //自定義字體 ITALIC斜體 borderText.setTextColor(Color.parseColor('#F46059')); //設置描邊顏色 borderText.setShadowLayer(3.0F, 2F, 2F, Color.parseColor('#ffd44042')); //設置陰影效果(投影) borderText.setGravity(getGravity()); } @Override public void setLayoutParams(ViewGroup.LayoutParams params) { super.setLayoutParams(params); borderText.setLayoutParams(params); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { CharSequence tt = borderText.getText(); //兩個TextView上的文字必須一致 if (tt == null || !tt.equals(this.getText())) { borderText.setText(getText()); this.postInvalidate(); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); borderText.measure(widthMeasureSpec, heightMeasureSpec); } protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); borderText.layout(left, top, right, bottom); } @Override protected void onDraw(Canvas canvas) { borderText.draw(canvas); super.onDraw(canvas); }}

xml

<LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:background='#F3B243' android:layout_height='match_parent' tools:context='.countdown.TestCountActivity'> <RelativeLayout android:layout_width='match_parent' android:layout_height='wrap_content'> <com.xiao.test.countdown.StrokeTextView android:layout_marginTop='100dp' android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:background='@drawable/play_advertising_timer_bg' android:paddingLeft='15dp' android:textColor='#FFFFFF' android:textSize='33sp' android:layout_centerHorizontal='true' android:layout_gravity='center' android:gravity='center_vertical' android:textStyle='italic' android:typeface='monospace' tools:ignore='RtlSymmetry' android:paddingStart='15dp' /> </RelativeLayout></LinearLayout>

倒計時幫助類

public class CountDownHelper { private OnCountDownListener onCountDownListener; private Disposable disposable; private long remainingTime; public CountDownHelper(long remainingTime) { this.remainingTime = remainingTime; } /** * 回收倒計時 */ public void destory() { if (disposable != null && !disposable.isDisposed()) { disposable.dispose(); } } /** * 開始倒計時 */ public void startCompute() { Observable.interval(1, TimeUnit.SECONDS) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Long>() { @Override public void onSubscribe(Disposable d) { disposable = d; } @Override public void onNext(Long aLong) { if (onCountDownListener == null) { return; } remainingTime -= 1000; if (remainingTime > 0) { int day = (int) (remainingTime / (1000 * 60 * 60 * 24)); int hour = (int) ((remainingTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); int minute = (int) ((remainingTime % (1000 * 60 * 60)) / (1000 * 60)); int second = (int) ((remainingTime % (1000 * 60)) / 1000); String dayStr = day >= 10 ? String.valueOf(day) : '0' + day; String hourStr = hour >= 10 ? String.valueOf(hour) : '0' + hour; String minuteStr = minute >= 10 ? String.valueOf(minute) : '0' + minute; String secondStr = second >= 10 ? String.valueOf(second) : '0' + second; onCountDownListener.countDown(dayStr, hourStr, minuteStr, secondStr); if (remainingTime <= 0) {onCountDownListener.countDownFinish();if (disposable != null && !disposable.isDisposed()) { disposable.dispose();} } } else { onCountDownListener.countDownFinish(); if (disposable != null && !disposable.isDisposed()) {disposable.dispose(); } } } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } /** * 設置倒計時回調監聽 * * @param onCountDownListener 倒計時監聽 */ public void setOnCountDownListener(OnCountDownListener onCountDownListener) { this.onCountDownListener = onCountDownListener; } public interface OnCountDownListener { /** * 倒計時 * * @param day 天 * @param hour 小時 * @param minute 分鐘 * @param second 秒 */ void countDown(String day, String hour, String minute, String second); /** * 倒計時完成 */ void countDownFinish(); }}

TestCountActivity.java

public class TestCountActivity extends AppCompatActivity { private CountDownHelper mCountDownHelper; private StrokeTextView mTvTest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_count); mTvTest = findViewById(R.id.tv_test);//設置自定義字體 Typeface fromAsset = Typeface.createFromAsset(getAssets(), 'fonts/Alibaba-PuHuiTi-Heavy.ttf'); mTvTest.setTypeface(fromAsset, Typeface.ITALIC); //自定義字體 ITALIC斜體 long aLong = 1787; mCountDownHelper = new CountDownHelper(aLong * 1000); mCountDownHelper.startCompute(); mCountDownHelper.setOnCountDownListener(new CountDownHelper.OnCountDownListener() { @SuppressLint('SetTextI18n') @Override public void countDown(String day, String hour, String minute, String second) { mTvTest.setText(hour + ':' + minute + ':' + second); } @Override public void countDownFinish() { Log.d('', '結束倒計時'); mCountDownHelper.destory(); //延時跳轉 new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { Toast.makeText(TestCountActivity.this, '時間到了', Toast.LENGTH_SHORT).show(); return false; } }).sendEmptyMessageDelayed(0, 10000);//表示延遲10秒發送任務 } }); }}

引入依賴

implementation ‘io.reactivex.rxjava2:rxjava:2.0.1’implementation ‘io.reactivex.rxjava2:rxandroid:2.0.1’

歡迎小伙伴們評論

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

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本天堂一区| 日韩三区在线| 一区二区三区四区日本视频| 久久中文字幕一区二区| 国产一卡不卡| 国产精品天天看天天狠| 国产乱码精品一区二区三区亚洲人| 国内精品美女在线观看| 国产日韩一区| 精品国产精品国产偷麻豆| 日韩成人a**站| 欧产日产国产精品视频| 久久精品不卡| 国产美女精品| 日韩欧美2区| 国产图片一区| 精品美女久久| 亚洲一级少妇| 亚洲免费成人| 日韩精品欧美精品| 久久免费精品| 蜜桃一区二区三区| 亚洲一区二区三区无吗| 日本电影久久久| 国产精品v一区二区三区| 精品一区二区三区四区五区| 亚洲播播91| 色爱综合网欧美| 国产伦理久久久久久妇女| 欧美日韩水蜜桃| 视频一区欧美日韩| 日韩1区2区日韩1区2区| 精品一区视频| 欧美日韩国产探花| 日韩av不卡在线观看| 色乱码一区二区三区网站| 欧美日韩视频| 国产精品久久久久久模特| 欧美国产另类| 久久久夜夜夜| 亚洲欧洲美洲国产香蕉| 美女国产一区二区三区| 久久精品成人| 日韩欧美三区| 丝袜美腿诱惑一区二区三区| 美国欧美日韩国产在线播放| 国产精品嫩模av在线| av在线日韩| 日韩一区精品| 日韩天堂在线| 欧美日韩 国产精品| 久久久久国产精品一区二区| 奇米狠狠一区二区三区| 亚洲深夜视频| 日韩一区二区三免费高清在线观看| 欧美亚洲专区| 久久精品一区二区不卡| 91亚洲无吗| 久久中文视频| 国产日韩精品视频一区二区三区| 涩涩av在线| 91成人福利| 午夜精品一区二区三区国产| 欧美极品中文字幕| 在线观看亚洲精品福利片| 国产精品久久观看| 日本不卡视频在线| 亚洲国内精品| 国产精品亚洲欧美日韩一区在线| 亚洲伦乱视频| 国产精品magnet| 亚洲精品护士| 欧美精品自拍| 国产66精品| 欧美亚洲色图校园春色| 亚洲精品国产偷自在线观看| 欧美黄色一区| 亚洲精品日本| 国产伊人精品| 国产精品成久久久久| 欧美日韩网址| 国产一级久久| 久久久成人网| 久久91视频| 日本一不卡视频| 日韩亚洲精品在线| 青青青免费在线视频| 国产免费播放一区二区| 亚洲资源在线| 国产农村妇女精品一二区| 少妇精品导航| 极品av在线| 精品国产乱码久久久| 欧美日韩黄网站| 免费观看在线综合色| 亚洲成人精选| 亚洲成人av观看| 97精品国产| 久久国产乱子精品免费女| 视频在线在亚洲| 国产综合激情| 久久青草久久| 欧美二三四区| 欧美香蕉视频| 久久久久久自在自线| 精品视频免费| 精品三级国产| 蜜桃精品视频| 久久中文字幕一区二区三区| 久久a爱视频| 老牛国内精品亚洲成av人片 | 久久精品99国产精品| 午夜一级在线看亚洲| 国产综合婷婷| 久久理论电影| 偷拍欧美精品| 伊人久久大香线蕉av超碰演员| 高清久久一区| 国产一区二区三区视频在线| 国产精品白丝久久av网站| 国产麻豆一区二区三区| 国产欧美日韩免费观看| 久久激情av| 欧美91在线|欧美| 美女毛片一区二区三区四区最新中文字幕亚洲 | 青青在线精品| 久久亚洲精品伦理| 日韩在线一二三区| 亚洲毛片网站| 欧美一区91| 国产精品theporn| 国内揄拍国内精品久久| 成人在线免费观看网站| 久久av电影| 精品美女在线视频| 在线看片国产福利你懂的| 91看片一区| 成人精品亚洲| 黄色精品网站| 亚洲精品无播放器在线播放| 日韩高清不卡一区二区| 国产精品亚洲四区在线观看| 精品美女在线视频| 国产亚洲一区二区手机在线观看| 亚洲黄色网址| 国产一区视频在线观看免费| 欧美日韩国产综合网| 中文字幕一区二区av| 奇米777国产一区国产二区| 美日韩一区二区三区| 日本免费一区二区三区四区| 亚洲大片在线| 中文一区在线| 日本中文字幕视频一区| 欧美精品第一区| 久久婷婷激情| 亚洲欧美在线专区| 国产精品美女在线观看直播| 国产不卡人人| 亚洲黄色在线| 国产亚洲高清在线观看| 欧美激情另类| 国产手机视频一区二区 | 999国产精品| 日韩一区欧美二区| 你懂的网址国产 欧美| av免费不卡国产观看| 日韩视频精品在线观看| 日本免费在线视频不卡一不卡二| 欧美日一区二区在线观看| 91综合网人人| 蜜臀av性久久久久蜜臀aⅴ流畅| 婷婷成人av| 精品久久亚洲| 亚洲一区国产| 久久一区视频| 国产精品普通话对白| 麻豆国产91在线播放| 亚洲自拍另类| 国产一区二区三区国产精品| 丝袜美腿高跟呻吟高潮一区| 91成人在线精品视频| 99精品视频在线观看免费播放| 国产视频亚洲| 精品亚洲自拍| 蜜桃久久av一区| 中文一区一区三区高中清不卡免费| 欧美一区二区性| 国产欧美日韩精品一区二区三区| 蜜桃视频在线网站| 日韩欧美四区| 91精品综合| 欧美激情日韩| 综合国产精品| 激情久久五月| 久久久精品区| 久久aⅴ国产紧身牛仔裤| 福利精品在线| 青青草国产成人99久久| 欧美在线资源|