开发者社区> 杰克.陈> 正文

Android项目实战(十):自定义倒计时的TextView

简介: 原文:Android项目实战(十):自定义倒计时的TextView 项目总结 -------------------------------------------------------------------------------------------- 有这么一个需求: 我有一个ListView,每一个列表项 布局如上图,顶部一个大图片展示,中部一个音频播放,底部一个描述文字。
+关注继续查看
原文:Android项目实战(十):自定义倒计时的TextView

项目总结

--------------------------------------------------------------------------------------------

有这么一个需求:

我有一个ListView,每一个列表项 布局如上图,顶部一个大图片展示,中部一个音频播放,底部一个描述文字。

在这个界面,一次只能点击一个列表项的播放按钮,那么我直接在ListView所属的activity创建了唯一的一个MediaPlayer,然而,这不是问题,所有的音频方面的播放冲突都解决了

 

问题就在中部的音频播放,我需要点击左边的播放按钮,然后右边有一个剩余时间要跟随着变化,当然点击暂停的时候,剩余时间也要暂停

首先,这里运用了购物车功能的原理实现按钮的操作。Android 购物车功能的实现

怎么实现某一个列表项中的TextView 显示的剩余时间也跟随着变化呢?

找寻了很多方法,最后问了一个Android交流群的群主得以解决。

怎么实现呢:

即自定义一个TextView在列表项中来显示剩余时间,只要每次刷新适配器的时候,给这个自定义的TextView 一个初始值,然后TextView就可以自己自定来把初始值每秒减一,显示在TextView上面。

 

那么看下这个自定义TextView

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;


public class ShowTiemTextView extends TextView implements Runnable{

    private boolean run = false; //觉得是否执行run方法
    private int time;         
public ShowTiemTextView(Context context) {
        super(context);
    }

    public ShowTiemTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public void setTime(int time){  //设定初始值
        this.time = time;  
    }
    public boolean isRun(){
        return run;
    }
    public void beginRun(){
        this.run = true;
        run();
    }
    public void stopRun(){
        this.run = false;
    }
    @Override
        public void run() {
        if (run){
            ComputeTime();
            this.setText(time / 60 + "'" + time % 60);
            postDelayed(this, 1000);
        }else{
            removeCallbacks(this);
        }
    }

    private void ComputeTime(){
        time--;
        if (time==0)
            stopRun();
    }
}

适配器调用关键代码:

//holder.list_detail_music_play是一个TextView
holder.list_detail_music_play.setTime(audiolength);
if (list.get(position).isPlaying()){  //如果音频正在播放
     holder.list_detail_music_play.beginRun();  //TextView内部线程开始运行
}else{                                //如果音频停止播放
     holder.list_detail_music_play.stopRun();   //TextView内部线程停止运行
}

 

学习内容来自:

自定义倒计时控件

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RK356X Android 11 增加自定义系统服务调用失败
RK356X Android 11 增加自定义系统服务调用失败
67 0
Android Spinner与自定义TextView填坑记
Android Spinner与自定义TextView填坑记
18 0
Android Settings,SourceSet,自定义Plugin
Android Settings,SourceSet,自定义Plugin
19 0
Android Studio4.1无法创建自定义模板的坑
Android Studio4.1无法创建自定义模板的坑
63 0
Android绘制竖直虚线完美解决方案—自定义View
开发中我们经常会遇到绘制虚线的需求,一般我们使用一个drawable文件即可实现,下面我会先列举常规drawable文件的实现方式。
375 0
Android自定义View水波纹
Android自定义View水波纹
59 0
Android自定义控件(十一)——自定义ViewGroup实现LinearLayout
Android自定义控件(十一)——自定义ViewGroup实现LinearLayout
105 0
【安卓开发】Android中自定义软键盘的使用
【安卓开发】Android中自定义软键盘的使用
94 0
看清安卓自定义view中触摸事件的“盲区”
今天的工作仍然在思考自定义view,因为需要调服务器接口,而这需要一些参数去其他地方拿,不在我调自定义view的页面,所以我希望能封装好这个自定义view,对外只要开放相应监听接口即可
28 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
蚂蚁聚宝Android秒级编译—— Freeline
立即下载
Android开发之多进程架构
立即下载