2013-02-16 74 views
0

我有一个活动,用户可以选择他们的角色。我在屏幕上有三个图像按钮,当用户点击他们想要的角色时,我希望游戏加载另一个活动,然后只显示他们在前一个屏幕中选择的角色的图像。基本上这只是我以后要做的事的先行者。我在这个网站上找到了一些关于如何完成这个任务的例子,但我还没有完全明白。基于用户选择设置图像?

这是我有我的性格评选活动:

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(); 
     } 
    }); 

的映像路径线抛出一个错误。我应该在这里放什么?

这是为了只显示所选择的图像的活动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"); 

这是否意味着我每次都手动输入图像路径?如果他们选择不同的图像怎么办?

有没有人有链接到一个实际的工作示例?当我是新手时,伪代码并不能真正帮助我,并且不知道需要保留什么以及需要去做什么。

+0

它抛出什么错误? – lelloman 2013-02-16 19:39:01

+0

试试这个http://stackoverflow.com/questions/8407336/how-to-pass-drawable-between-activities – Pragnani 2013-02-16 19:43:58

+0

这是说它不知道什么pathToImage和Character_Chosen是。 – Rhendar 2013-02-16 19:51:03

回答

0

我会采取一种替代方法,而不是将路径传递给想要显示图像(或称头像)的每个活动。
我会将它保存在全局应用程序对象中(通过扩展应用程序),将其加载到内存或图像路径中,并在一个地方访问或更改它并在所有活动中访问该值。

+0

那么,如何使用Java代码而不是XML来设置图像? – Rhendar 2013-02-16 19:50:07

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) 
} 

同样的方式可以为所有剩余的按钮来完成。

快乐编码:)

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是我用过的getIntExtra使用我在MainActivity.java指定让弓箭手形象的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> 

我希望这有助于。 :)