MainActivity线程之外的无效和ImageView



我的MainActivity的contentView/View可以通过调用invalidate()后的任何地方进行刷新:

setContentView(R.layout.activity_main);

但是如果我在项目中调用一个对话框选择:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
    case R.id.menu_tools:
        showDialog();
        return true;
            ...

这样做不会刷新对话框中的ImageView:

public class ToolSettingsDialog extends Dialog {
                ...
private void updatePreview() {
    ImageView image = (ImageView)findViewById(R.id.widthImageView);
    Bitmap bitmap = Bitmap.createBitmap(400, 400, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    bitmap.eraseColor(Color.WHITE);
    Drawing d = null;
    d = box.getDrawing();
    s.draw(paint, canvas);
    image.setImageBitmap(bitmap);
    image.invalidate();     
}

我一直在寻找周围,我似乎不能理解如何在不同的线程比UI失效

Dialogs绘制在UI thread上,类似于Android上的所有其他UI操作。所以这可能不是你的问题。

同样,您不能在UI线程之外执行UI操作。您必须在UI线程上执行invalidate(),使用View.postInvalidate()Activity.runOnUIThread()之类的东西。

最新更新