适配器 item 倒计时 (笔记 下回复制粘贴用)

自定义类
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()));

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值