在OnClickListener()里面动态改变控件的高度问题

fso918 2013-12-25 06:24:07
如题,想实现,当点击一个控件的时候,后台每过100millis就减少控件的高度,最后再隐藏控件。
我写的代码

@Override
public void onClick(View v) {
String pos = (String)v.getTag();
TableRow tr = (TableRow)findViewById(R.id.row_one_hide);
GridView gv = (GridView) tr.getChildAt(0);
LayoutParams params = gv.getLayoutParams();
int height = 100;
while(height > 0){
params.height = height;
height -= 12;
try {
Thread.currentThread().sleep(100);
gv.setLayoutParams(params);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
params.height = params.WRAP_CONTENT;
gv.setLayoutParams(params);
tr.setVisibility(View.GONE);
}

为什么这段代码的效果是线程停一段时间(这段时间为Thread.sleep()语句执行的次数*100 millis),然后这个控件就瞬间消失,不是每隔一段时间消失一小段(12px),最终才消失。
求高手解决这个问题
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
依然绿茶 2013-12-26
  • 打赏
  • 举报
回复
引用 1 楼 fso918 的回复:
今天想到一个实现的方法了 新启动一个线程,在这个线程里每隔100毫秒就往主线程的MessageQueue里面发送一条更新控件高度的Message. 在Handler里面,获取这个Message里面发送过来的控件的高度值,然后更新控件高度就行了。 求高手有其他思路吗?
我想说的都知道了,楼主,你知道的太多了! ps:就你说的这么做,不要放在主线程,要不然就会出现你上面出现的问题
fso918 2013-12-26
  • 打赏
  • 举报
回复
今天想到一个实现的方法了 新启动一个线程,在这个线程里每隔100毫秒就往主线程的MessageQueue里面发送一条更新控件高度的Message. 在Handler里面,获取这个Message里面发送过来的控件的高度值,然后更新控件高度就行了。 求高手有其他思路吗?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧