如何从外部类设置图像位图?

时间:2013-05-30 18:31:51

标签: android android-imageview

我有一个自动生成的主要类。我想将简单的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。

2 个答案:

答案 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。

相关问题