public class TearDownView extends LinearLayout { public long endTime = 0L; private boolean mIsAttachedToWindow = false; private static final int MESSAGE_WHAT = 0; private TearDownHandler mHandler = new TearDownHandler(this); private int textSize = 0; private TextView dayTextView,hourTextView,minutsTextView,secondTextView; public TearDownView(Context context) { super(context); init(context,null); } public TearDownView(Context context, AttributeSet attributeSet) { super(context, attributeSet); init(context,attributeSet); } public TearDownView(Context context, AttributeSet attributeSet, int paramInt) { super(context, attributeSet, paramInt); init(context,attributeSet); } public void startTearDown(long endTime) { this.endTime = endTime; if(mIsAttachedToWindow) { mHandler.removeMessages(MESSAGE_WHAT); mHandler.sendEmptyMessageDelayed(MESSAGE_WHAT, 1000); } } private void init(Context context, AttributeSet attributeSet){ LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.tear_down_layout,this); dayTextView = (TextView) findViewById(R.id.day_time); hourTextView = (TextView) findViewById(R.id.hour_time); minutsTextView = (TextView) findViewById(R.id.minuts_time); secondTextView = (TextView) findViewById(R.id.second_time); } @Override protected void onAttachedToWindow() { // TODO Auto-generated method stub mHandler.removeMessages(MESSAGE_WHAT); mHandler.sendEmptyMessageDelayed(MESSAGE_WHAT, 1000); mIsAttachedToWindow = true; super.onAttachedToWindow(); } @Override protected void onDetachedFromWindow() { // TODO Auto-generated method stub mHandler.removeMessages(MESSAGE_WHAT); mIsAttachedToWindow = false; super.onDetachedFromWindow(); } /*public final Handler mHandler = new Handler() { public void handleMessage(Message msg) { Log.e(tag, "handleMessage, mIsAttachedToWindow = " + mIsAttachedToWindow); if (msg.what == 0 && mIsAttachedToWindow) { if (leftTime > 0L) { leftTime--; String str = TimeUtil.formatDiffDate(leftTime); setText("剩余 " + str); mHandler.sendEmptyMessageDelayed(0, 1000); } else { setText("抢购结束"); } } }; };*/ public void tearDown() { if(mIsAttachedToWindow) { long remainTime = (endTime - System.currentTimeMillis()) / 1000; if (remainTime > 0) { String str = TimeUtil.formatDiffDate2(remainTime); String[] splitStr = str.split(":"); if(splitStr.length == 4){ dayTextView.setText(splitStr[1]); hourTextView.setText(splitStr[2]); minutsTextView.setText(splitStr[3]); // secondTextView.setText(splitStr[3]); } if(splitStr.length == 3){ dayTextView.setText(splitStr[1]); hourTextView.setText(splitStr[2]); minutsTextView.setText(splitStr[3]); // secondTextView.setText("0"); } mHandler.sendEmptyMessageDelayed(MESSAGE_WHAT, 1000); new CountDownTimer(1100,100){ @Override public void onTick(long millisUntilFinished) { secondTextView.setText(millisUntilFinished/100+""); } @Override public void onFinish() { } }.start(); } else { // setText("抢购结束"); } } } public static class TearDownHandler extends Handler { private WeakReference<TearDownView> mTextViewRef; public TearDownHandler(TearDownView view) { mTextViewRef = new WeakReference<TearDownView>(view); } @Override public void handleMessage(Message msg) { TearDownView textView = mTextViewRef.get(); if(null != textView) { removeMessages(MESSAGE_WHAT); textView.tearDown(); } } } }
布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:text="12" android:textColor="@color/white" android:id="@+id/day_time" style="@style/text_round_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/text_round" /> <TextView style="@style/text_round_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/y25" android:text=":"/> <TextView android:id="@+id/hour_time" style="@style/text_round_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:background="@drawable/text_round" /> <TextView style="@style/text_round_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="@dimen/y25" android:text=":" /> <TextView android:id="@+id/minuts_time" style="@style/text_round_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:background="@drawable/text_round"/> <TextView style="@style/text_round_style" android:textSize="@dimen/y25" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=":"/> <TextView android:id="@+id/second_time" style="@style/text_round_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:background="@drawable/text_round" /> </LinearLayout>
调用
tearDown.startTearDown(1499792292894L);