嗨我在创建imageview时出现问题,当我点击上一个(b1)和下一个(b2)按钮时,它会显示来自img数组的下一个和上一个图像,但有时它会显示随机图像,如android布局图像等。
public class FullTable extends Activity{
int[] img={
R.drawable.t1,R.drawable.t2,R.drawable.t3,
R.drawable.t4,R.drawable.t5,R.drawable.t6,
R.drawable.t7,R.drawable.t8,R.drawable.t9,
R.drawable.t10,R.drawable.t11,R.drawable.t12,
R.drawable.t13,R.drawable.t14,R.drawable.t15,
R.drawable.t16,R.drawable.t17,R.drawable.t18,
R.drawable.t19,R.drawable.t20};
ImageButton b1,b2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.full_table);
b1 =(ImageButton) findViewById(R.id.buttonback);
b2=(ImageButton) findViewById(R.id.buttonnext);
// get intent data
Intent i = getIntent();
// Selected image id
final int position = i.getExtras().getInt("id");
final ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
//imageView.setImageResource(imageAdapter.mThumbIds[position]);
imageView.setImageResource(img[position]);
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
imageView.setImageResource(img[position]-1);
img[position]--;
}
});
b2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
imageView.setImageResource(img[position]+1);
img[position]++;
}
});
}
}
答案 0 :(得分:1)
在您的代码中,您根本不会递增和递减position
变量。而你的逻辑似乎有些错误。这就是为什么你要获得一些随机ID的原因。
如果您的img
数组已包含所需的Drawable
个ID,则只需将position
变量设置为零并从中删除final
即可,然后递增并直接递减它。
例如,更改此内容:
img[position]--;
对此:
img[--position];
并设置:
int position = 0; // Default value.
稍后,将方法ImageView#setImageResource
更改为ImageView#setImageDrawable
。像:
Drawable myDrawable = getResources().getDrawable(img[position]); // Get the Drawable Object.
imageview.setImageDrawable(myDrawable); // Set the Drawable on your ImageView.
另外,请考虑使用List
之类的ArrayList
而非简单数组。
编辑:正如您在评论中提到的那样,如果您在最后一张图片上,则可以重新将position
变量重置为零重新开始。你可以通过获取数组的length
来做到这一点。类似的东西:
if (position >= img.length) {
position = 0;
}
答案 1 :(得分:0)
onClick()
内的b1
:
imageView.setImageResource(img[position]-1);
:这行代码从id
数组中获取drawables
img
,并将该值减少1
。
但你想要的是显示以前的图像,所以你需要修改你的代码:
imageView.setImageResource(img[**position-1**]);
similary modify your code for b2 onCLick
imageView.setImageResource(img[**position+1**]);
答案 2 :(得分:0)
在position
而非class scope
方法内创建变量onCreate()
。然后在你的b1 onClick()
方法递减position
然后显示图片,发布一些代码来演示相同的内容: - >
// at class level and not inside `onCreate()`
ImageButton b1,b2;
int position = 0; // Initializing with default value
// then inside onCreate()
position = i.getExtras().getInt("id");
b1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
position--;
if(position < 0){
position = img.length;
}
imageView.setImageResource(img[position]);
}
});
b2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
position++;
if(position > img.length - 1){
position = 0;
}
imageView.setImageResource(img[position]);
}
});