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内部线程停止运行 }
学习内容来自:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android项目实战(七):Dialog主题Activity实现自定义对话框效果
原文: Android项目实战(七):Dialog主题Activity实现自定义对话框效果 想必大家都用过Dialog主题的Activity吧,用它来显示自定义对话框效果绝对是一个非常不错的选择。 即把activity交互界面以Dialog的形式展现出来,Dialog主题的Activity大小将以内容的宽高来决定 <activity android:name=”MainActivity” android:theme=”@android:style/Theme.Dialog”> </activity> 可以看到设置为Theme.Dialog主题的activity显示效果, 是类似对话框的形式显示出来的,而背景则是这个Activity的上一个activity交互界面, 或者如果此Activity是程序第一个Activity,背景则是手机桌面 那么让我们自己做一个漂亮点的对话框形式的Activity 首先,要把Activity自带的标题去掉 使用requestWindowFeature(Window.FEATURE_NO_TITLE); 语句 注意 需要在setCon...
- 下一篇
Android项目实战(十一):moveTaskToBack(boolean ) 方法的使用
原文: Android项目实战(十一):moveTaskToBack(boolean ) 方法的使用 当你开发的程序被按后退键退出的时候, 你肯定不想让他就这么被finish()吧,那么就想把程序退置到后台就可。 (类似于PC端,你关闭一个浏览器和你最小化一个浏览器的区别) 参看方法:public boolean moveTaskToBack(boolean nonRoot) 参数是一个布尔值 1、false,仅当activity为task根(即首个activity例如启动activity之类的)时才生效 2、true,无论什么时候都会生效,忽略上述条件 注意:此方法不会改变task中的activity中的顺序,效果基本等同于home键 --------------------------------------------------------------------------------------- 使用此方法,便不会执行Activity的onDestroy()方法 这样只有在第一次启动的时候会执行onCreate()。以后(只要进程不死掉)都不会执行onCreate() ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程