以编程方式创建ImageView而无需布局

5

我正在尝试通过编写代码创建一个ImageView,并设置图像资源,然后将该ImageView作为子视图添加到我的主视图中。所有我找到的示例都是使用布局来实现的。但是在我的视图构造函数中,我不知道如何做到这一点。

以下是代码片段:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new CanvasView(this));

    }
}

视图:
public class CanvasView extends SurfaceView implements SurfaceHolder.Callback {
    public CanvasView(Context context) {
        super(context);

        SurfaceHolder sh = getHolder();
        sh.addCallback(this);

        ImageView iv = new ImageView(context);
        iv.setImageResource(R.drawable.wand);

        // how to add iv to myself?
    }
}

为什么要使用 ImageView?你可以直接使用 SurfaceViewonDraw 方法绘制 Bitmap - Abhishek V
2个回答

2
你不能用这种方式来实现。你需要一个包含它们的容器,例如:
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyContainer(this));

    }
}

public class MyContainer extends LinearLayout {
  public MyContainer(Context context) {
    addView(new CanvasView(context));
    ImageView iv = new ImageView(context);
    iv.setImageResource(R.drawable.wand);
    addView(iv);
  }
}

请记住,如果您需要直接从XML文件中填充视图,则对于和,您需要使用以ContextAttributeSet作为参数的构造函数。


在这种情况下,ImageView 将填充我的 CanvasView? - Matthias
不需要。您需要在SurfaceView内部绘制位图吗? - Blackbelt
是的,那基本上就是我想要的。但我也可以从ImageView而不是SurfaceView派生我的视图。 - Matthias
你可以覆盖SurfaceView.draw并使用canvas.drawBitmap。 - Blackbelt
没错,这就是我目前正在尝试的 ;) - Matthias

1

这取决于您使用的布局,这里有一些代码,其中所有视图都是以编程方式创建的。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout rootLayout = new LinearLayout(getApplicationContext());
    rootLayout.setOrientation(LinearLayout.VERTICAL);

    ImageView imageView = new ImageView(getApplicationContext());
    imageView.setImageResource(R.drawable.sample);

    rootLayout.addView(imageView);

    setContentView(rootLayout);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接