调用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?