0

メインの自動生成クラスがあります。xml で宣言したイメージ ビューに単純な ic_launcher png を描画したいと考えています。

私の主なクラス:

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 がどのように機能するかはわかりませんが、「null ポインター例外」が表示されます。ImageView をロードしたときにエラーが発生したことはほぼ確実です。

私はこれを試しました: context.findViewById(R.id.imageView1); 無駄に。

画像の ID は imageView1 です。

4

2 に答える 2

3

クラスから ImageView 画像を変更するにMyCanvasは、MyCanvas クラス コンストラクターを使用ImageViewして、Activity でインスタンスを次のように初期化した後、インスタンスを送信します。

 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);
于 2013-05-30T18:36:27.193 に答える