自定义类 public class Adapter_CountDownLL extends LinearLayout { private TextView hourTv, minTv, secondTv; private Context context; private CountDownTimer countDownTimer; private Drawable itemBg; public Adapter_CountDownLL(Context context) { this(context, null, 0); } public Adapter_CountDownLL(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public Adapter_CountDownLL(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.count_down); itemBg = typedArray.getDrawable(R.styleable.count_down_item_bg); typedArray.recycle(); initView(); } public void initView() { View view = LayoutInflater.from(context).inflate(R.layout.countdownll_item, null); addView(view); hourTv = view.findViewById(R.id.hour_tv); if (itemBg != null) { hourTv.setBackground(itemBg); } minTv = view.findViewById(R.id.minute_tv); minTv.setBackground(itemBg); secondTv = view.findViewById(R.id.second_tv); secondTv.setBackground(itemBg); } public void setCountDownNum(long countDownNum) { if (countDownNum <= 0) { return; } countDownTimer = new CountDownTimer(countDownNum * 1000, 1000) { @Override public void onTick(long millisUntilFinished) { Adapter_CountDownLL.this.setVisibility(VISIBLE); TimeModel timeModel = longToTimeModel(millisUntilFinished / 1000); hourTv.setText(timeModel.getHour()); minTv.setText(timeModel.getMinute()); secondTv.setText(timeModel.getSecond()); } @Override public void onFinish() { stopTimer(); Adapter_CountDownLL.this.setVisibility(GONE); } }; countDownTimer.start(); } public void stopTimer() { if (countDownTimer != null) { countDownTimer.cancel(); countDownTimer = null; } } class TimeModel { String day; String hour; String minute; String second; TimeModel(String day, String hour, String minute, String second) { this.day = day; this.hour = hour; this.minute = minute; this.second = second; } String getDay() { return day; } String getHour() { return hour; } String getMinute() { return minute; } String getSecond() { return second; } } private TimeModel longToTimeModel(long m) { long min = 60; long hour = min * 60; long day = 24 * hour; long dayNum = m / day; long hourNum = m % day / hour; long minNum = m % hour / min; long secNum = m % min; String hourNumStr; if (0 <= hourNum && hourNum <= 9) { hourNumStr = "0" + hourNum; } else { hourNumStr = "" + hourNum; } String minNumStr; if (0 <= minNum && minNum <= 9) { minNumStr = "0" + minNum; } else { minNumStr = "" + minNum; } String secNumStr; if (0 <= secNum && secNum <= 9) { secNumStr = "0" + secNum; } else { secNumStr = "" + secNum; } return new TimeModel(dayNum + "", hourNumStr, minNumStr, secNumStr); } }
布局 countdownll_item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/day_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0天" android:textColor="@color/text_gray" android:textSize="13dp" android:visibility="gone" /> <TextView android:id="@+id/hour_tv" android:layout_width="17dp" android:layout_height="14dp" android:gravity="center" android:text="00" android:textColor="@color/text_gray" android:textSize="11dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=":" android:textColor="#333333" android:textSize="11dp" /> <TextView android:id="@+id/minute_tv" android:layout_width="17dp" android:layout_height="14dp" android:gravity="center" android:text="00" android:textColor="@color/text_gray" android:textSize="11dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=":" android:textColor="#333333" android:textSize="11dp" /> <TextView android:id="@+id/second_tv" android:layout_width="17dp" android:layout_height="14dp" android:gravity="center" android:text="00" android:textColor="@color/text_gray" android:textSize="11dp" /> </LinearLayout>
attrs
<declare-styleable name="count_down"> <attr name="item_bg" format="reference"></attr> </declare-styleable>
用法
countdownll_shengyushijian.setCountDownNum(Long.parseLong(list.get(position).getCountdown()));