MainActivity线程之外的Invalidating和ImageView

时间:2013-03-26 07:27:52

标签: android dialog imageview invalidation ui-thread

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

setContentView(R.layout.activity_main);

但如果我在我的项目中拨打一个Dialog,请选择:

@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无效。

1 个答案:

答案 0 :(得分:1)

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

此外,您无法在UI线程上执行UI操作。您必须使用invalidate()View.postInvalidate()之类的内容在UI线程上执行Activity.runOnUIThread()