0

ユーザーがキャラクターを選択できるアクティビティがあります。画面に3つの画像ボタンがあり、ユーザーが目的のキャラクターをクリックすると、ゲームに別のアクティビティをロードして、前の画面で選択したキャラクターの画像を表示するようにします。基本的に、これは私が後で行うことの先駆けにすぎません。私はこれを達成する方法についてこのウェブサイトでいくつかの例を見つけました、しかし私はそれを完全に解決していません。

これは私が私のキャラクター選択活動で持っているものです:

Button archerButton = (Button) findViewById(R.id.Button_Archer);
archerButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(SelectCharacterActivity.this, LevelOneActivity.class);
        intent.putExtra("@drawable/archer", pathToImage);
        startActivity(intent);
        finish();
        }
    });

pathToImage行がエラーをスローしています。私はここに正確に何を置くことになっていますか?

選択した画像を表示するだけのLevelOneアクティビティには、次のものがあります。

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    setContentView(R.layout.level_one);



    String path = getIntent().getStringExtra("imagePath");
    Drawable image = Drawable.createFromPath(path);
    Character_Chosen.setImageDrawable(image);
    }

このセクションでも少し混乱しています。Character_Chosenエントリは、選択した画像を格納する画像ビューの名前です。

私もこのコード行で混乱しています:

String path = getIntent().getStringExtra("imagePath");

これは、毎回手動で画像パスを入力する必要があることを意味しますか?別の画像を選択した場合はどうなりますか?

誰かが実際の実例へのリンクを持っていますか?私が初心者で、何を維持する必要があり、何を実行する必要があるのか​​わからない場合、擬似コードはあまり役に立ちません。

4

3 に答える 3

0

私は別のアプローチを行うことでそれを実行しました。

MainActivity.java

私がしたことは、文字列パスを使用する代わりにインテントで R.drawable 参照を渡すことです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnArcher = (Button)findViewById(R.id.button_archer);

    btnArcher.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this,LevelOne.class);
            intent.putExtra("archer_drawable", R.drawable.archer);
            startActivity(intent);
        }
     });

}

levelOne.java では、MainActivity.java で指定した名前を使用して getIntExtra を使用し、アーチャー イメージの R.drawable リソース リファレンスを取得しました (任意の名前を割り当てることができます)。最後に、getIntExtra から取得した整数値を使用し、setImageResource(int resId) メソッドを呼び出してイメージ ビューで使用します。

ImageView img;
int drwResource;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.level_one);

    //find the ImageView fron level_one.xml
    img = (ImageView)findViewById(R.id.character_image);

    drwResource = getIntent().getIntExtra("archer_drawable", -1);   
    img.setImageResource(drwResource);

}

level_one.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/character_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />
</RelativeLayout>

これが役立つことを願っています。:)

于 2013-02-17T00:01:12.890 に答える
0

まず、リソースをidに変換します

Button archerButton = (Button) findViewById(R.id.Button_Archer);
archerButton.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {

    int id =getResources().getIdentifier("imagename", "drawable", getPackageName());  

    Intent intent = new Intent(SelectCharacterActivity.this, LevelOneActivity.class);
    intent.putExtra("image_id", id);
    startActivity(intent);
    finish();
    }
});

LevelOne.java

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.level_one);



int imageId=getIntent().getIntExtra("image_id", 0);
Character_Chosen.setImageResource(imageId)
}

残りのすべてのボタンに対して同じ方法を実行できます。

ハッピーコーディング:)

于 2013-02-16T19:54:31.020 に答える
0

画像を表示する(またはアバターと言う)すべてのアクティビティにパスを渡す代わりに、別のアプローチをとります。
メモリにロードされたビットマップまたは画像へのパスのいずれかでグローバルアプリケーションオブジェクトに保存し(アプリケーションを拡張して)、1か所でアクセスまたは変更し、すべてのアクティビティでその値にアクセスします。

于 2013-02-16T19:41:06.477 に答える