调用invalidate时,执行了ondraw(),但是绘制ui没有发生变化
在网上找了一个类似音频频谱图的自定义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?
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?
...全文
相关推荐
ondraw不执行,请大神帮忙
ondraw不执行,请大神帮忙
Android中View绘制流程
Android中View绘制流程
invalidate
invalidate()的用法 主要用于刷新
Invalidate() 的用法小解
vc学习,Invalidate(true),Invalidate(false)2008-08-27 08:13在学一个位图显示程序时,发现了图像显示能不能重绘的问题,当时看了msdn,也在网上看了不少回复。总感觉不是很理解。后来仔细试了一下,有点心得,特写出来,以鼓励自己。顺便也为那些和我一样刚开始学习vc的人提供些许帮助。
Adroid UI 界面绘制原理分析
Adroid UI 界面绘制原理分析 Adroid UI 界面绘制原理分析 Adroid UI 界面绘制原理分析


