我有一个自动生成的主要类。我想将简单的ic_launcher png绘制到我在xml中声明的图像视图中。
我的主要课程:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyCanvas can = new MyCanvas(this);
//ImageView img = (ImageView) findViewById(R.id.imageView1);
//img.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
}
}
我上课:
public class MyCanvas extends View{
public MyCanvas(Context context) {
super(context);
ImageView img = (ImageView) findViewById(R.id.imageView1);
img.setImageBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher));
}
}
您会注意到我在主要活动中注释了设置位图。那是因为这是一个考验。代码在主活动中完美运行,但在其他类中失败。 我不知道logCat是如何工作的,但是我看到了一个“空指针异常”。当我加载ImageView时,我几乎肯定是错误。
我试过这个:context.findViewById(R.id.imageView1);无济于事。
注意,图像的id是imageView1。
答案 0 :(得分:3)
用于从MyCanvas
类更改ImageView图像使用MyCanvas类构造函数在Activity中初始化它之后发送ImageView
实例:
public MyCanvas(Context context,ImageView img) {
super(context);
img.setImageBitmap(BitmapFactory.decodeResource(context.getResources(),
R.drawable.ic_launcher));
}
并从Activity:
发送ImageView实例 setContentView(R.layout.activity_main);
ImageView img = (ImageView) findViewById(R.id.imageView1);
MyCanvas can = new MyCanvas(this,img);
答案 1 :(得分:1)
在MyCanvas中,您正在使用View类的findViewById,并从该视图中搜索子项,这与您的活动类中的不同。
例如,您可以在MainActivity 1st中找到根布局,并将其作为参数传递给MyCanvas。