Android: ImageView 使用动态布局的一些问题
Android: some problems using dynamic layout with ImageView
我正在开发一个 Android 游戏,我的 Bestiary 需要一个动态布局,它显示一个 '???' image (R.drawable.ignoto) 如果某个怪物还没有被发现,否则是一个带有它的名字的图像。代码如下:
package fogames.tamagomonsters;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
public class BestiaryMenuActivity extends Activity {
int[] monstersId = new int[]{R.drawable.ignoto, R.drawable.m001, R.drawable.m002, R.drawable.m003};
int backgroundId;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
FrameLayout fl = new FrameLayout(this);
ImageView background = new ImageView(this);
background.setBackgroundResource(backgroundId);
fl.addView(background);
ScrollView sv = new ScrollView(this);
fl.addView(sv);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);
ImageView m001 = new ImageView(this);
ImageView m002 = new ImageView(this);
ImageView m003 = new ImageView(this);
if (Settings.mgot[0])
m001.setBackgroundResource(monstersId[1]);
else
m001.setBackgroundResource(monstersId[0]);
if (Settings.mgot[1])
m002.setBackgroundResource(monstersId[2]);
else
m002.setBackgroundResource(monstersId[0]);
if (Settings.mgot[2])
m003.setBackgroundResource(monstersId[3]);
else
m003.setBackgroundResource(monstersId[0]);
ll.addView(m001);
ll.addView(m002);
ll.addView(m003);
this.setContentView(fl);
}
}
这段代码有两个问题:
当我访问 Bestiary 菜单时,只出现最后一个 ImageView。
有什么方法可以使用数组来处理这些 ImageView,以避免在包含 100 多个怪物时出现混乱?
在您的情况下,使用 ListView 和 Adapter 是最佳解决方案。
看过this很清楚的例子
我正在开发一个 Android 游戏,我的 Bestiary 需要一个动态布局,它显示一个 '???' image (R.drawable.ignoto) 如果某个怪物还没有被发现,否则是一个带有它的名字的图像。代码如下:
package fogames.tamagomonsters;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
public class BestiaryMenuActivity extends Activity {
int[] monstersId = new int[]{R.drawable.ignoto, R.drawable.m001, R.drawable.m002, R.drawable.m003};
int backgroundId;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
FrameLayout fl = new FrameLayout(this);
ImageView background = new ImageView(this);
background.setBackgroundResource(backgroundId);
fl.addView(background);
ScrollView sv = new ScrollView(this);
fl.addView(sv);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);
ImageView m001 = new ImageView(this);
ImageView m002 = new ImageView(this);
ImageView m003 = new ImageView(this);
if (Settings.mgot[0])
m001.setBackgroundResource(monstersId[1]);
else
m001.setBackgroundResource(monstersId[0]);
if (Settings.mgot[1])
m002.setBackgroundResource(monstersId[2]);
else
m002.setBackgroundResource(monstersId[0]);
if (Settings.mgot[2])
m003.setBackgroundResource(monstersId[3]);
else
m003.setBackgroundResource(monstersId[0]);
ll.addView(m001);
ll.addView(m002);
ll.addView(m003);
this.setContentView(fl);
}
}
这段代码有两个问题:
当我访问 Bestiary 菜单时,只出现最后一个 ImageView。
有什么方法可以使用数组来处理这些 ImageView,以避免在包含 100 多个怪物时出现混乱?
在您的情况下,使用 ListView 和 Adapter 是最佳解决方案。
看过this很清楚的例子