[原创]Android秒杀倒计时自定义TextView
自定义TextView控件TimeTextView代码:
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Paint; import android.text.Html; import android.util.AttributeSet; import android.widget.TextView;import com.new0315.R; /*** 自定义倒计时文本控件* @author Administrator**/ public class TimeTextView extends TextView implements Runnable{Paint mPaint; //画笔,包含了画几何图形、文本等的样式和颜色信息private long[] times;private long mday, mhour, mmin, msecond;//天,小时,分钟,秒private boolean run=false; //是否启动了public TimeTextView(Context context, AttributeSet attrs) {super(context, attrs);mPaint=new Paint();TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TimeTextView);array.recycle(); //一定要调用,否则这次的设定会对下次的使用造成影响 }public TimeTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mPaint=new Paint();TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TimeTextView);array.recycle(); //一定要调用,否则这次的设定会对下次的使用造成影响 }public TimeTextView(Context context) {super(context);}public long[] getTimes() {return times;}public void setTimes(long[] times) {this.times = times;mday = times[0];mhour = times[1];mmin = times[2];msecond = times[3];}/*** 倒计时计算*/private void ComputeTime() {msecond--;if (msecond < 0) {mmin--;msecond = 59;if (mmin < 0) {mmin = 59;mhour--;if (mhour < 0) {// 倒计时结束mhour = 59;mday--;}}}}public boolean isRun() {return run;}public void setRun(boolean run) {this.run = run;}@Overridepublic void run() {//标示已经启动run=true;ComputeTime();String strTime="还剩</pre> <span style="color: red;">"+mday+"</span> <pre>"+"天</pre> <span style="color: red;">"+mhour+"</span> <pre>小时</pre> <span style="color: red;">"+mmin+"</span> <pre>分钟</pre> <span style="color: red;">"+msecond+"</span> <pre>秒";this.setText(Html.fromHtml(strTime));postDelayed(this, 1000);}}
属性atts.xml
<declare-styleable name="TimeTextView"></declare-styleable>
Adapter调用代码:
import java.text.DecimalFormat; import java.util.List;import android.content.Context; import android.graphics.Paint; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView;import com.new0315.R; import com.new0315.entity.SpecialGoods; import com.new0315.utils.CorrectSpecialDataFormHttp; import com.new0315.utils.DateTools; import com.new0315.widgets.TimeTextView; import com.nostra13.universalimageloader.core.ImageLoader;public class SpecialGoodsAdapter extends BaseAdapter {private Context context;private List list;private long sumTime;public SpecialGoodsAdapter(Context context) {this.context = context;}public void setList(List list) {this.list = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int arg0, View convertView, ViewGroup arg2) {//开始计时,性能测试用nanoTime会更精确,因为它是纳秒级的long startTime = System.nanoTime();Log.d("position","getView " + arg0 + " " + convertView);ViewHolder viewHolder;if(convertView == null){convertView = LayoutInflater.from(context).inflate(R.layout.item_temai_list, null);viewHolder = new ViewHolder();viewHolder.goodName = (TextView) convertView.findViewById(R.id.temai_Name);viewHolder.price = (TextView) convertView.findViewById(R.id.temai_yuanjia_text);viewHolder.specialPrice = (TextView) convertView.findViewById(R.id.temai_xiajia_text);//特卖倒计时控件viewHolder.mTimeText = (TimeTextView) convertView.findViewById(R.id.temai_timeTextView);viewHolder.showDate = (TextView) convertView.findViewById(R.id.index_temai_day);viewHolder.showDate_l = (LinearLayout) convertView.findViewById(R.id.temai_weikaishi);viewHolder.showTime = (LinearLayout) convertView.findViewById(R.id.temai_yikaishi);viewHolder.koukou = (TextView) convertView.findViewById(R.id.temai_zhekou_text);viewHolder.image = (ImageView) convertView.findViewById(R.id.index_temai_image);Log.d("GoogleIO","new position:"+viewHolder.goodName.getText());convertView.setTag(viewHolder);}else {viewHolder = (ViewHolder) convertView.getTag();resetViewHolder(viewHolder);}//setDataString off = getOff(list.get(arg0).getGoods_Price(), list.get(arg0).getGoods_SpecialPrice());viewHolder.goodName.setText(list.get(arg0).getGoods_Name());viewHolder.price.setText(list.get(arg0).getGoods_Price());viewHolder.price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);viewHolder.specialPrice.setText(list.get(arg0).getGoods_SpecialPrice());viewHolder.koukou.setText(off + "折");if (DateTools.isStart(list.get(arg0).getSpecialFrom())) {//特卖倒计时开始 viewHolder.mTimeText.setTimes(DateTools.getDate(CorrectSpecialDataFormHttp.correctData((list.get(arg0).getSpecialEnd()))));//已经在倒计时的时候不再开启计时if(!viewHolder.mTimeText.isRun()){viewHolder.mTimeText.run();}viewHolder.showDate_l.setVisibility(View.GONE);viewHolder.showTime.setVisibility(View.VISIBLE);} else {viewHolder.showTime.setVisibility(View.GONE);viewHolder.showDate_l.setVisibility(View.VISIBLE);viewHolder.showDate.setText(DateTools.getDay(list.get(arg0).getSpecialFrom())+ "");}ImageLoader.getInstance().displayImage(list.get(arg0).getGoods_Pic(),viewHolder.image);//停止计时long endTime = System.nanoTime();//耗时long spendTime = (endTime - startTime);sumTime += spendTime; // Log.d("GoogleIO", "position at:"+arg0+"--sumTime:"+String.valueOf(sumTime));return convertView;}public String getOff(String price, String specialPrice) {double off = Double.parseDouble(specialPrice)/ Double.parseDouble(price) * 10;DecimalFormat df = new DecimalFormat("0.0");String off_String = df.format(off);if (off_String.equals("NaN") || off_String.equals("1")) {off_String = "10";}return off_String;}static class ViewHolder {ImageView image;TextView goodName;TextView price;TextView specialPrice;TextView koukou;TimeTextView mTimeText;TextView showDate;LinearLayout showDate_l;LinearLayout showTime;}protected void resetViewHolder(ViewHolder viewHolder) {viewHolder.image.setImageBitmap(null);viewHolder.goodName.setText("");viewHolder.price.setText("");viewHolder.specialPrice.setText("");viewHolder.koukou.setText("");viewHolder.mTimeText.setText("");viewHolder.showDate.setText("");} }
layout使用代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/home_panicbuying_background" android:orientation="vertical" ><!-- 免单 --><RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" ><FrameLayout android:id="@+id/index_temai_image_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_margin="5dp" ><ImageView android:id="@+id/index_temai_image" android:layout_width="80dp" android:layout_height="80dp" /><ImageView android:id="@+id/index_temai_discount_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|left" android:background="@drawable/app_limit_buy_sale" android:src="@drawable/app_limit_buy_begin" /> </FrameLayout><LinearLayout android:id="@+id/temai_date_show" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/index_temai_image_layout" android:orientation="vertical" ><RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" ><LinearLayout android:id="@+id/temai_weikaishi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:orientation="horizontal" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="距离开始还有" android:textColor="@color/black" android:textSize="@dimen/small_text_size" android:textStyle="bold" /><TextView android:id="@+id/index_temai_day" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="99" android:textColor="@color/red" android:textSize="@dimen/small_text_size" android:textStyle="bold" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="天" android:textColor="@color/black" android:textSize="@dimen/small_text_size" android:textStyle="bold" /> </LinearLayout><LinearLayout android:id="@+id/temai_yikaishi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:orientation="horizontal" ><com.new0315.widgets.TimeTextView android:id="@+id/temai_timeTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/black" android:textSize="@dimen/small_text_size" /></LinearLayout> </RelativeLayout><LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_marginRight="20dp" android:layout_marginTop="5dp" android:orientation="horizontal" ><TextView android:id="@+id/temai_Name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:lines="2" android:text="大众甲壳虫,豪华款,曾全套汽车配件,十年加油卡,车库补贴,十年车险,五年以旧换新服务,比提供五年免费待架服务" android:textColor="@color/black" android:textSize="12sp" /> </LinearLayout><LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/index_raw_price" android:textColor="@color/darkgray" android:textSize="@dimen/small_text_size" /><TextView android:id="@+id/temai_yuanjia_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:textColor="@color/darkgray" android:textSize="@dimen/small_text_size" /> </LinearLayout> </LinearLayout> </RelativeLayout><LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5sp" android:background="@drawable/app_limit_buy_sale_bg" android:gravity="center_vertical" ><LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="3dp" android:orientation="horizontal" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="特卖价:" android:textColor="#919263" android:textSize="13sp" /><TextView android:id="@+id/temai_xiajia_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5sp" android:text="¥400" android:textColor="@color/red" android:textSize="13sp" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="折扣:" android:textColor="#919263" android:textSize="13sp" /><TextView android:id="@+id/temai_zhekou_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5sp" android:text="5.0折" android:textColor="@color/green" android:textSize="13sp" /> </LinearLayout> </LinearLayout></LinearLayout>
最终效果:
转载于:https://www.cnblogs.com/mikel/p/3533689.html
[原创]Android秒杀倒计时自定义TextView相关推荐
- android如何让自定义控件居中,Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中...
如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextViewpackage com.test.signcalendar.w ...
- Android 定时器+倒计时 仿淘宝秒杀
目录结构 效果图: imageViewHolder public class imageViewHolder extends RecyclerView.ViewHolder {public Image ...
- android 自定义text,android – 使用自定义textSize实现自定义TextView
我已经实现了自定义TextView,然后我需要更改其文本大小以供将来使用.在那一步,我决定使用style.xml和attr.xml进行textSize自定义 但是,当我的自定义布局膨胀时,我收到运行时 ...
- android 换行模式,Android进阶之自定义View(1)实现可换行的TextView
今天来一起学习一下最简单的自定义view,自己动手写一个MyTextView,当然不会像系统的TextView那么复杂,只是实现一下TextView的简单功能,包括分行显示及自定义属性的处理,主要目的 ...
- android自定义省略号,Android开发自定义TextView省略号样式的方法
本文实例讲述了Android开发自定义TextView省略号样式的方法.分享给大家供大家参考,具体如下: 在布局xml中设置textView的字段 android:maxLines="2&q ...
- android背景颜色动态修改,Android自定义TextView带圆角及背景颜色(动态改变圆角背景颜色)...
最近根据项目需求自定义了一个TextView控件,主要用来做状态的标识,比如一个订单状态有各种,当然了这种设置在Android中可以直接用xml文件来处理,但是对于xml文件太过于麻烦,针对不同的颜色 ...
- android 微信朋友圈 全功能,Android仿微信朋友圈文字展开全文功能 Android自定义TextView仿微信朋友圈文字展开全文功能...
Android自定义TextView仿微信朋友圈文字信息,展开全文功能 代码及注释如下: 首先写一个xml文件 showmore.xml: android:orientation="vert ...
- android高仿京东秒杀,Android仿京东首页秒杀倒计时
本文实例为大家分享了Android仿京东首页秒杀倒计时的具体代码,供大家参考,具体内容如下 xml配置 android:layout_width="wrap_content" an ...
- Android尺子布局和自定义TextView
Android尺子布局和自定义TextView 下面是具体实现: 新建项目:在UI中 <LinearLayout xmlns:android="http://schemas.andro ...
- Android 自定义控件起步:自定义TextView
转载至:http://blog.csdn.net/lmj623565791/article/details/24252901 不过对原作进行了相关细节优化,所以才有此文.. 首先我们看一下我们要达到的 ...
最新文章
- 基于开源CA系统ejbca community 6.3.1.1构建私有CA管理数字证书
- 栈——用顺序表实现栈操作
- git分支操作、分支合并冲突解决
- bootstrap中导航、导航栏、表单及自定义表单
- 腾讯回应租号打游戏:已向超20家账号交易平台发函
- 洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
- cad2022新功能介绍(autocad2022简体中文版)
- 微信公众号weui的使用
- 【毕设教程】NBIOT 窄带物联网介绍
- F1 Score详解 查准率较高 召回率较低怎末处理?
- 给TextView设置颜色选择器selector
- web开发中cab文件 使用
- 对学校的希望和寄语_新学期对学校的寄语
- 【Codecs系列】HEVC中三种Intra帧类型的区别:BLA/IDR/CRA
- signature=37615ca45efe9600a605bfc580bf67ea,止痛药双氯芬酸会显著增加心脏病中风风险
- BlockChain技术系列(三)- fabric协议介绍
- 1067 mysql_windows无法启动MySQL服务报错1067的解决方法
- 开发者百度地图的使用,做一个小demo,ak秘钥
- 视频播放器realplayer的安装
- 查询快递单号物流后,设置时间自动刷新查询未签收单号
热门文章
- Matlab|Simulink打开mdl/slx等文件报错:lnvalid block diagram name supplied. Valid block diagram names ...
- Matlab中的画图函数
- 操作系统 - 调度算法(高响应比优先算法)
- java后台管理项目策划书_12款适合做Java后台管理系统的项目
- 常用连接linux的工具,收藏必备
- 使用Jacob自动替换书签内容
- linux 安装hdf5view 入坑指南
- SQL SERVER—修改时不允许保存修改
- DDC传输协议以及显示器EDID结构介绍
- 如何安装xvidcore