android自定义倒计时控件示例

这篇文章主要介绍了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;
    }

    @Override
    public 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;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public 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);
        }
        //setData
        String 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/Free-Thinker/p/3938451.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从gitlab上拉代码_从gitlab上拉取代码并一键部署

一、gitlab安装GitLab是一个利用Ruby on Rails开发的开源应用程序&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开的或者私人项目。GitLab拥有与Github类似的功能&#xff0c;能够浏览源代码&#xff0c;管理缺陷和注释。可以管理团队对仓库的访…

产品管理流程

转载于:https://www.cnblogs.com/candle806/p/4860841.html

如何根据灰度直方图计算标准差_如何根据电器功率计算电线的粗细?

一般来说&#xff0c;测算电线的粗细&#xff0c;需要根据功率计算电流&#xff0c;根据电流选择导线截面&#xff0c;根据导线的截面&#xff0c;导线或电缆的型号查厂家的该型号的导线电缆的直径。这里就涉及了&#xff1a;电线粗细与功率之间的关系计算&#xff1b;导线截面…

解惑烟草行业工控系统如何风险评估

上周五下午&#xff0c;威努特工控安全联合创始人 赵宇 先生&#xff0c;带来了一场关于“工控系统的风险评估”的技术讲座。此次近200注册报名的朋友&#xff0c;来自各大高校、国企、外企、测评中心、安全厂商、大型集成商以及大型IT科技企业、安全实验室等。 烟草企业调研参…

UVa 11806 Cheerleaders

题意&#xff1a;m行n列的矩形网格放k个相同的石子&#xff0c;要求第一行最后一行第一列最后一列都必须有石子&#xff0c;问有多少种放法 A为第一行没有石子的方案数&#xff0c;BCD依此类推&#xff0c;全集为S 如果没有任何要求的话&#xff0c;放法数应该是C(rc, k) 解法中…

为什么说一站式移动办公SaaS平台一定是未来!

摘要&#xff1a;移动办公SaaS之间的核心竞争不在于比拼技术&#xff0c;而在于谁更好地与企业管理和文化相互融合&#xff0c;给企业带来更加年轻、更加高效的工作方式&#xff0c;实现了企业组织的互联网化。 没有哪个企业愿意当诺基亚&#xff0c;“并没有做错什么&#xff…

server sql 将出生日期转为年龄_在sql server表中有一个出生日期字段我怎么才能在当前年份改变时自动更新年龄字段...

先说明下identity(1,1)&#xff1a;自动1foreign key 外键语法create database ztxuse ztxCreate Table QAUser--baidu用户资料(Id int Primary Key not null identity(1,1),--自动编号,也同时用于对用户的标示符QA_name varchar(20),--用户名Sex char(2),--或者使用bit类型,但…

自动裁剪图片

自动裁剪商品图片View Code执行裁剪指定目录商品图片动作///<summary> ///执行指定目录商品图片动作 ///</summary> public static void FindPictureDoCutIt(object o) {string filePatho.ToString();try{DirectioryInfo fatherFolder new DirectioryInfo(filePat…

32位oracle_oracle 性能调优

pool&#xff0c;sga&#xff0c;pga的配置 物理内存16G在调整SGA前&#xff0c;先看下服务器操作系统是32位还是64位的&#xff0c;如果是32位的&#xff0c;则SGA最大不能超过1.7G&#xff0c;如果是64位的&#xff0c;则不能超过4G。基本分配原则&#xff0c;db_block_buffe…

看网络电子围栏如何做好周界安防

围栏是为了保护一定范围内的任何物遭到侵害而设立的一个屏障&#xff0c;在一定程度上有保护的作用&#xff0c;但是也不能完全阻止。传统的围栏以加高或者添加危险触碰物来增加安全性&#xff0c;但是会影响美观&#xff0c;不能进行主动击退&#xff0c;也给围栏内人物带来不…

Objective-C语法之代码块(block)的使用

代码块本质上是和其它变量相似。不同的是&#xff0c;代码块存储的数据是一个函数体。使用代码块是&#xff0c;你能够像调用其它标准函数一样&#xff0c;传入參数数&#xff0c;并得到返回值。脱字符&#xff08;^&#xff09;是块的语法标记。依照我们熟悉的參数语法规约所定…

卓越管理的实践技巧(1)如何进行有效的指导 Guidelines for Effective Coaching

Guidelines for Effective Coaching 前文卓越管理的秘密&#xff08;Behind Closed Doors&#xff09;最后一部分提到了总结的13条卓越管理的实践技巧并列出了所有实践技巧名称的索引&#xff0c;这篇文章主要写卓越管理的实践技巧的第&#xff08;1&#xff09;条&#xff1a;…

count返回0_你是一直认为 count(1) 比 count(*) 效率高么?

MySQL count(1) 真的比 count(*) 快么? 反正同事们都是这么说的&#xff0c;我也姑且觉得对吧&#xff0c;那么没有自己研究一下究竟&#xff1f;如果我告诉你他们一样&#xff0c;你信么&#xff1f;有 Where 条件的 count&#xff0c;会根据扫码结果count 一下所有的行数&am…

dbeaver连接mysql失败_关于DBeaver连接MySQL数据库遇到的版本问题解决

在使用DBeaver连接MySQL数据库时&#xff0c;明明按照它提示进行jar包的下载&#xff0c;但是仍然报错&#xff0c;提示版本问题&#xff0c;那么这个时候我们要解决的就是MySQL版本对应驱动包的问题。笔者经过测试后有了一些心得&#xff0c;放上来希望对大家能够有所参考。首…

【WIN10】VisualStateManager使用說明

Demo下載&#xff1a;http://yunpan.cn/cFjgPtWRHKH9H 访问密码 c4b7 顧名思義&#xff0c;視圖狀態管理器。 在WPF中&#xff0c;它的功能似乎更強大。在UWP中&#xff0c;閹割了GotElementState方法&#xff0c;導致它只能在控件內部使用。 這個東東一般用來突出某些操作&am…

Hadoop伪分布配置与基于Eclipse开发环境搭建

国内私募机构九鼎控股打造APP&#xff0c;来就送 20元现金领取地址&#xff1a;http://jdb.jiudingcapital.com/phone.html内部邀请码&#xff1a;C8E245J &#xff08;不写邀请码&#xff0c;没有现金送&#xff09;国内私募机构九鼎控股打造&#xff0c;九鼎投资是在全国股份…

百度地图JavaScript API覆盖物旋转时出现偏移

在项目中&#xff0c;调用百度地图JavaScript API&#xff0c;做覆盖物的旋转再添加到地图上&#xff0c;结果出现偏移了。 调试过程中的效果图&#xff1a; 发现图片的旋转并不是按车子的中心来的&#xff0c;而是之外的一个点。最后发现犯了一个很细节的错&#xff1a; <s…

英利1500伏光伏组件系列亮相美国

2016年4月21日&#xff0c;英利宣布其公用事业规模太阳能光伏生产线YGE-U1500系列亮相美国。 近日&#xff0c;美国保险商实验室&#xff08;UL&#xff09;对新型光伏板系列进行认证&#xff0c;可用于最大系统电压为1500伏的项目。 部署英利多晶硅YGE-U 1500光伏组件系列可为…

eclipse 关闭时progress information弹框_Spring开发环境搭建(Eclipse)

开发环境搭建&#xff0c;主要包含2部分:Java安装Eclipse安装为易于学习&#xff0c;我们只安装这2个部分&#xff0c;对于一般开发学习也足够了。如果你有其他要安装的&#xff0c;酌情添加。Java安装我们使用Java8&#xff1a;下载JDK32位下载x86版本&#xff0c;64位下载x64…

紫薯铜锣烧

材料&#xff1a; 全麦粉 三勺 鸡蛋 一只 毅力低脂纯牛奶 半盒 紫薯 蜂蜜 一勺 做法&#xff1a; 1. 鸡蛋打开&#xff0c;加入半盒牛奶&#xff0c;分三次加入三勺全麦面粉&#xff0c;每次加入都要上下搅拌&#xff0c;面粉要过筛&#xff0c;最后加入半勺蜂蜜 2.紫薯蒸熟压…