调用invalidate时,执行了ondraw(),但是绘制ui没有发生变化

煎饼加蛋 2017-05-08 09:05:36
在网上找了一个类似音频频谱图的自定义view,想修改一下让使用方便一点,但是执行过invalidate方法之后,Ui并没有发生变化,


private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
invalidate();
break;
case 1:
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
AudioBar.this.invalidate();
mHandler.sendEmptyMessage(1);
}
}, 2000);
break;
}
};
};


ondraw()方法:

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
System.out.println(mCurrentHeight);
if (mCurrentHeight != null) {
//使用者指定了每个小矩形当前的高度则使用

for (int i = 0; i < mRectCount; i++) {
int random = 0;
mPaint.setStrokeWidth(5);
canvas.drawLine((float) (mViewWidth * 0.4 / 2 - 5 )
, mRectHeight/2
, (float) (mViewWidth * 0.4 / 2 + mRectWidth * (i + 1) + 10)
, mRectHeight/2, mPaint);

mPaint.setColor(Color.parseColor(strBottomColor));
mPaint.setStrokeWidth(5);
canvas.drawRect((float) (mViewWidth * 0.4 / 2 + mRectWidth * i + mOffset)
, mCurrentHeight[i] + random
,(float) (mViewWidth * 0.4 / 2 + mRectWidth * (i + 1))
, mRectHeight/2
, mPaint);
....
}


public void setAutoPlay(boolean isAuto){
if(isAuto){
mHandler.sendEmptyMessage(1);
}else {
mHandler.sendEmptyMessage(0);
}

}

经过调试之后发现,在invalidate 到 ondraw都是正常的,但是canvas.drawRect(...)之后并没有刷新UI?


...全文
187 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
煎饼加蛋 2017-12-26
  • 打赏
  • 举报
回复

80,337

社区成员

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

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