自定义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相关推荐

  1. android如何让自定义控件居中,Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中...

    如何实现使用TextView的DrawableLeft使图片和文字居中显示呢??? 代码如下: 1.首先自定义一个类,继承TextViewpackage com.test.signcalendar.w ...

  2. Android 定时器+倒计时 仿淘宝秒杀

    目录结构 效果图: imageViewHolder public class imageViewHolder extends RecyclerView.ViewHolder {public Image ...

  3. android 自定义text,android – 使用自定义textSize实现自定义TextView

    我已经实现了自定义TextView,然后我需要更改其文本大小以供将来使用.在那一步,我决定使用style.xml和attr.xml进行textSize自定义 但是,当我的自定义布局膨胀时,我收到运行时 ...

  4. android 换行模式,Android进阶之自定义View(1)实现可换行的TextView

    今天来一起学习一下最简单的自定义view,自己动手写一个MyTextView,当然不会像系统的TextView那么复杂,只是实现一下TextView的简单功能,包括分行显示及自定义属性的处理,主要目的 ...

  5. android自定义省略号,Android开发自定义TextView省略号样式的方法

    本文实例讲述了Android开发自定义TextView省略号样式的方法.分享给大家供大家参考,具体如下: 在布局xml中设置textView的字段 android:maxLines="2&q ...

  6. android背景颜色动态修改,Android自定义TextView带圆角及背景颜色(动态改变圆角背景颜色)...

    最近根据项目需求自定义了一个TextView控件,主要用来做状态的标识,比如一个订单状态有各种,当然了这种设置在Android中可以直接用xml文件来处理,但是对于xml文件太过于麻烦,针对不同的颜色 ...

  7. android 微信朋友圈 全功能,Android仿微信朋友圈文字展开全文功能 Android自定义TextView仿微信朋友圈文字展开全文功能...

    Android自定义TextView仿微信朋友圈文字信息,展开全文功能 代码及注释如下: 首先写一个xml文件 showmore.xml: android:orientation="vert ...

  8. android高仿京东秒杀,Android仿京东首页秒杀倒计时

    本文实例为大家分享了Android仿京东首页秒杀倒计时的具体代码,供大家参考,具体内容如下 xml配置 android:layout_width="wrap_content" an ...

  9. Android尺子布局和自定义TextView

    Android尺子布局和自定义TextView 下面是具体实现: 新建项目:在UI中 <LinearLayout xmlns:android="http://schemas.andro ...

  10. Android 自定义控件起步:自定义TextView

    转载至:http://blog.csdn.net/lmj623565791/article/details/24252901 不过对原作进行了相关细节优化,所以才有此文.. 首先我们看一下我们要达到的 ...

最新文章

  1. 基于开源CA系统ejbca community 6.3.1.1构建私有CA管理数字证书
  2. 栈——用顺序表实现栈操作
  3. git分支操作、分支合并冲突解决
  4. bootstrap中导航、导航栏、表单及自定义表单
  5. 腾讯回应租号打游戏:已向超20家账号交易平台发函
  6. 洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
  7. cad2022新功能介绍(autocad2022简体中文版)
  8. 微信公众号weui的使用
  9. 【毕设教程】NBIOT 窄带物联网介绍
  10. F1 Score详解 查准率较高 召回率较低怎末处理?
  11. 给TextView设置颜色选择器selector
  12. web开发中cab文件 使用
  13. 对学校的希望和寄语_新学期对学校的寄语
  14. 【Codecs系列】HEVC中三种Intra帧类型的区别:BLA/IDR/CRA
  15. signature=37615ca45efe9600a605bfc580bf67ea,止痛药双氯芬酸会显著增加心脏病中风风险
  16. BlockChain技术系列(三)- fabric协议介绍
  17. 1067 mysql_windows无法启动MySQL服务报错1067的解决方法
  18. 开发者百度地图的使用,做一个小demo,ak秘钥
  19. 视频播放器realplayer的安装
  20. 查询快递单号物流后,设置时间自动刷新查询未签收单号

热门文章

  1. Matlab|Simulink打开mdl/slx等文件报错:lnvalid block diagram name supplied. Valid block diagram names ...
  2. Matlab中的画图函数
  3. 操作系统 - 调度算法(高响应比优先算法)
  4. java后台管理项目策划书_12款适合做Java后台管理系统的项目
  5. 常用连接linux的工具,收藏必备
  6. 使用Jacob自动替换书签内容
  7. linux 安装hdf5view 入坑指南
  8. SQL SERVER—修改时不允许保存修改
  9. DDC传输协议以及显示器EDID结构介绍
  10. 如何安装xvidcore