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

煎饼加蛋 煎饼加蛋 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在网上找了一个类似音频频谱图的自定义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?


...全文
评论 1
收藏 已收藏
分享
返回顶部
煎饼加蛋
Android 80,490 成员 91,375 内容