繁体   English   中英

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

[英]How To Set Image Bitmap From External Class?

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

您会注意到我注释掉了在我的主要活动中设置位图的过程。 那是因为那是一次考验。 该代码在main活动中工作完美,但在其他类中失败。 我不知道logCat的工作原理,但是我看到“空指针异常”。 我几乎肯定是错误是当我加载ImageView时。

我尝试了这个:context.findViewById(R.id.imageView1); 无济于事。

请注意,图像的ID为imageView1。

要从MyCanvas类更改ImageView图像, MyCanvas使用MyCanvas类构造函数在Activity中将ImageView实例初始化为后发送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);

在MyCanvas中,您使用的是View类的findViewById,它从该视图子级中搜索,这与您的活动类不同。

例如,您可以在MainActivity 1st中找到根布局,并将其作为参数传递给MyCanvas。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM