ImageButton显示随机图像

时间:2015-10-03 11:40:04

标签: android

嗨我在创建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]++;


            }
        });
    }

}

3 个答案:

答案 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()内的b1imageView.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]);

        }
    });