私はプロジェクトをかなり進めていて、望ましくない障害にぶつかり、解決策を見つけることができません。私がやろうとしていることを説明すると思われるsudoコードがいくつかありますが、完全なコードではありません。ImageHandler に渡そうとすると、Main クラスの ContextWrapper で NullPointerException というエラーが発生します。残念ながら、ImageViews と私はすべてのビューを疑っていますが、アクティビティが onCreate を呼び出す前にドローアブルを解決しようとしています。そのため、画像を Activity Constructor に保存する必要がありましたが、コンテキストを渡すことができません。AsyncTask またはハンドラがアクティビティの onCreate() を待機することを検討しましたが、SurfaceView に戻って独自のデザインを作成することもできます。私は引き続き調べますが、Android の経験が豊富な人がより良い設計または解決策を知っていれば、大きな助けになるでしょう。また、互換性のある Eclipse レイアウト プレビューアも非常に推奨されます。また、多くのイメージは同じですが、パフォーマンスがひどい場合でも、各イメージビューに目的のレイヤードローアブルを個別に持たせるようにしました。imagehandler が onCreate で作成された場合、ImageView がそのコンストラクターでそれを呼び出そうとすると null になるため、Activity にコンストラクターを追加する必要がありました。Activity.onCreate が呼び出される前に、アクティビティ コンポーネントが準備を整えている理由は、まだよくわかっていません。また、多くのイメージは同じですが、パフォーマンスがひどい場合でも、各イメージビューに目的のレイヤードローアブルを個別に持たせるようにしました。imagehandler が onCreate で作成された場合、ImageView がそのコンストラクターでそれを呼び出そうとすると null になるため、Activity にコンストラクターを追加する必要がありました。Activity.onCreate が呼び出される前に、アクティビティ コンポーネントが準備を整えている理由は、まだよくわかっていません。また、多くのイメージは同じですが、パフォーマンスがひどい場合でも、各イメージビューに目的のレイヤードローアブルを個別に持たせるようにしました。imagehandler が onCreate で作成された場合、ImageView がそのコンストラクターでそれを呼び出そうとすると null になるため、Activity にコンストラクターを追加する必要がありました。Activity.onCreate が呼び出される前に、アクティビティ コンポーネントが準備を整えている理由は、まだよくわかっていません。
public class MainActivity extends Activity {
ImageHandler ih;
MainActivity(){
Log.d("Acitivity", "Constructed");
ih=new ImageHandler(this);
//ih=new ImageHandler(this.getApplicationContext());
//ih=new ImageHandler(this.getBaseContext());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("Activity", "Created");
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public LayerDrawable getImage(int some_identifier){
return ih.getImage(some_identifier);
}
}
===================
public class ImageHandler {
LayerDrawable[] image;
ImageHandler(Context context){
Log.d("ImageView", "Constructed");
//manipulate resource images to create custom layerdrawables and store.
//originally attempted to create a layer.xml and although it worked
//in the emulator perfectly the behavior was quite different in live tests.
//although it made sense any change to layer.xml images was global for all who used it
//the strange behavior was that the emulator behaved as desired.
}
public LayerDrawable getImage(int identifier){
return image[identifier];
}
}
====================
public class SomeImageView extends ImageView{
public SomeImageView(Context context, AttributeSet attrs) {
super(context, attrs);
int some_identifier=0;
this.setImageDrawable(((MainActivity)context).getImage(some_identifier));
}
}
助けてくれたコミュニティにもう一度感謝します。