我想显示我的RecyclerView的每个单元格内剩余多少时间…因为我已经为每个单元格使用了倒数计时器.在每一行中我启动一个计数器并管理onTick()……所有工作都按预期工作……我有一个计时器勾选每一行,我的单元格也在更新,但我的单元格现在正在闪烁….而且它我滚动时发疯了.

这是我的适配器……

if (product.getProductType().equalsIgnoreCase("Auction Product")) {

isAuction=true;

viewHolder.img_product_type.setImageResource(R.drawable.bid);

viewHolder.txt_timeleft.setVisibility(View.VISIBLE);

start_countDown(product.getStart(),product.getStop(),viewHolder.txt_timeleft);

}

计数器代码如下….

private void start_countDown(String start, String stop, final TextView txt_timeleft) {

try {

//Log.e("hetal",start+"....."+stop);

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Calendar start_date = Calendar.getInstance();

start_date.setTime(format.parse(start));

Calendar end_date = Calendar.getInstance();

end_date.setTime(format.parse(stop));

final Calendar today = Calendar.getInstance();

CountDownTimer timer;

txt_timeleft.setTextColor(Color.DKGRAY);

if(today.before(start_date)){

txt_timeleft.setTextColor(context.getResources().getColor(R.color.red));

txt_timeleft.setText(context.getString(R.string.auction_not_start));

Animation anim = new AlphaAnimation(0.0f, 1.0f);

anim.setDuration(1000); //You can manage the time of the blink with this parameter

anim.setStartOffset(20);

anim.setRepeatMode(Animation.REVERSE);

anim.setRepeatCount(Animation.INFINITE);

txt_timeleft.startAnimation(anim);

return;

}

if (!today.before(end_date)) {

txt_timeleft.setTextColor(context.getResources().getColor(R.color.red));

txt_timeleft.setText(context.getString(R.string.time_out));

Animation anim = new AlphaAnimation(0.0f, 1.0f);

anim.setDuration(1000); //You can manage the time of the blink with this parameter

anim.setStartOffset(20);

anim.setRepeatMode(Animation.REVERSE);

anim.setRepeatCount(Animation.INFINITE);

txt_timeleft.startAnimation(anim);

return;

}

timer = new CountDownTimer(end_date.getTimeInMillis(), 1000) {

@Override

public void onTick(long millisUntilFinished) {

Calendar calendar = Calendar.getInstance();

calendar.setTimeInMillis(millisUntilFinished);

long diff = calendar.getTimeInMillis() - today.getTimeInMillis();

long seconds = diff / 1000 % 60;

long minutes = diff / (60 * 1000) % 60;

long hours = diff / (60 * 60 * 1000) % 24;

//long days = (int) diff / (24 * 60 * 60 * 1000);

long days = TimeUnit.MILLISECONDS.toDays(diff);

String left = "";

if (days > 0)

left += days + " " + context.getString(R.string.txt_day) + " ,";

if (hours > 0)

left += hours + " " + context.getString(R.string.txt_hour) + " ,";

if (minutes > 0)

left += minutes + " " + context.getString(R.string.txt_minute) + " ,";

left += seconds + " " + context.getString(R.string.txt_second);

final String finalLeft = left;

if (finalLeft.equals("0") || finalLeft.contains("-")) {

txt_timeleft.setText(context.getString(R.string.time_out));

txt_timeleft.setTextColor(context.getResources().getColor(R.color.red));

Animation anim = new AlphaAnimation(0.0f, 1.0f);

anim.setDuration(1000); //You can manage the time of the blink with this parameter

anim.setStartOffset(20);

anim.setRepeatMode(Animation.REVERSE);

anim.setRepeatCount(Animation.INFINITE);

txt_timeleft.startAnimation(anim);

} else

txt_timeleft.setText(finalLeft);

}

@Override

public void onFinish() {

}

};

timer.start();

}catch (Exception ex){

ex.printStackTrace();

}

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐