一般Table的数据(行)更新时,要配合一定的动画效果,才能引起用户注意。
在Android里,颜色值用8位的16进制来表示,其中前两2位用来表示 alpha channel, 后6位用来表示rgb. 在程序里面,只要在指定时间内,将alpha channel从 0调整到 0xff,就实现了 highlight TableRow.
class ColorRefreshTask extends TimerTask {
final static int DELAY_ONCE =200;
final static int TOTAL_RUNTIME = 3000;
final static int POWER_16_16 = 16 * 16* 16 * 16 * 16 * 16;
final static int INCREASE_ONCE = 0xff / (TOTAL_RUNTIME / DELAY_ONCE);
int color;
int id;
int startTime;
int alphaChannel;
/**
*
* @param color (TableRow's current background color)
* @param id TableRow's id(user id)
*/
public ColorRefreshTask(int color, int id) {
super();
Log.d("color", "ready to set color!");
this.color = color;
this.id = id;
this.startTime = 0;
this.alphaChannel = 0;
}
public void run(){
int colorComm = color -0xff000000; //RGB color value;
int currColor = color;
if(startTime < TOTAL_RUNTIME) {
startTime += DELAY_ONCE;
alphaChannel += INCREASE_ONCE;
currColor = POWER_16_16 * alphaChannel + colorComm;
Log.d("color", Integer.toHexString(currColor));
sendMsg(currColor);
messageHandler.postDelayed(this,DELAY_ONCE);
}
else {
sendMsg(currColor);
}
}
public void startTimer(){
messageHandler.postDelayed(this,DELAY_ONCE);
}
private void sendMsg(int currColor){
Message message = messageHandler.obtainMessage();
message.what = MESSAGE_HANDLE_ID_UPDATEROW_BACKGROUND;
Bundle bundle = new Bundle();
bundle.putInt(MESSAGE_KEY_ID, id);
bundle.putInt(MESSAGE_KEY_COLOR, currColor);
message.setData(bundle);
messageHandler.sendMessage(message);
}
public void stopTimer(){
this.cancel();
}
}
private static final int MESSAGE_HANDLE_ID = 800;
private static final int MESSAGE_HANDLE_ID_UPDATEROW_DATA = MESSAGE_HANDLE_ID + 1;
private static final int MESSAGE_HANDLE_ID_UPDATEROW_BACKGROUND = MESSAGE_HANDLE_ID +2;
private Handler messageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case MESSAGE_HANDLE_ID_UPDATEROW_DATA:{
int id = msg.getData().getInt(MESSAGE_KEY_ID);
String fields[] = new String[5];
fields[0] = msg.getData().getString("fields1");
fields[1] = msg.getData().getString("fields2");
fields[2] = msg.getData().getString("fields3");
fields[3] = msg.getData().getString("fields4");
fields[4] = msg.getData().getString("fields5");
updateRowInTable(id, fields);
break;
}
case MESSAGE_HANDLE_ID_UPDATEROW_BACKGROUND:
{
int id = msg.getData().getInt(MESSAGE_KEY_ID);
int color = msg.getData().getInt(MESSAGE_KEY_COLOR);
TableRow tableRow= (TableRow)findViewById( id);
if(tableRow != null) {
int count = tableRow.getChildCount();
for(int index = 0; index < count; index++) {
TextView child = (TextView)(tableRow.getChildAt(index));
if(child != null) {
child.setBackgroundColor(color);
}
}
}
break;
}
default:
}
}
};
private final void updateRowInTable(int code,String[] otherFields) {
TableRow tableRow= (TableRow)findViewById(code);
if(tableRow == null) {
Log.d("tablerow", "can't find row in the table!");
return;
}
int bgColorEnd = (otherFields[2].indexOf("-") >= 0) ? 0xff2e8b57 : 0xffb22222;
for(int index = 0; index < otherFields.length; index++) {
int identity = code * 13 +(index+1);
TextView textView= (findViewById(identity)!= null) ? (TextView) findViewById(identity) : new TextView(this);
if(otherFields[index].indexOf('-') >=0) {
textView.setTextColor(Color.GREEN);
}
else if( index == 2) {
textView.setTextColor(Color.RED);
}
else {
textView.setTextColor(Color.WHITE);
}
textView.setText(otherFields[index]);
Log.d("tablerow", "updated id:" + (code) + ", value=" + otherFields[index] );
if(findViewById(identity) == null){
textView.setId(identity);
tableRow.addView(textView);
Log.d("tablerow", "add new view!");
}
else {
Log.d("tablerow", "upate view!");
}
textView.postInvalidate();
//textView.invalidate();
}
tableRow.postInvalidate();
//tableRow.invalidate();
ColorRefreshTask refresh = new ColorRefreshTask(bgColorEnd,code);
messageHandler.postDelayed(refresh, 50);
}
分享到:
相关推荐
对于字符串类型的值,在值前面加上单引号以避免 Excel 将其识别为数字。 ### 7. 添加总结行 ```csharp int rowSum = rowIndex + 1; int colSum = 2; excel.Cells[rowSum, 2] = "总计"; xSt.get_Range(excel.Cells...
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
wrf转mp4播放器1.1.1
内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。
国网台区终端最新规范
《基于YOLOv8的智慧农业水肥一体化控制系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
GSDML-V2.33-LEUZE-AMS3048i-20170622.xml
微信小程序项目课程设计,包含LW+ppt
微信小程序项目课程设计,包含LW+ppt
终端运行进度条脚本
幼儿园预防肺结核教育培训课件资料
python,python相关资源
《基于YOLOv8的智慧校园电动车充电桩状态监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计
deepseek 临床之理性软肋.pdf
SM2258XT量产工具(包含16种程序),固态硬盘量产工具使用
RecyclerView.zip
水务大脑让水务运营更智能(23页)
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
大众捷达轿车前轮制动器设计
《基于YOLOv8的智能工厂压缩空气泄漏检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计