0

我是 android 的初学者...在我的应用程序中,我需要显示上一个下一个图像.. 我到了这里,但是图像被打乱了,没有通过单击上一个和下一个按钮获得正确的上一个和下一个图像....这里是我的代码。 ..

 public class MainActivity extends Activity  implements OnClickListener{

 ImageButton ib_left_arrow, ib_right_arrow;

 ImageView slidingimage;

 Animation rotateimage;

 public int currentimageindex = 0;

 private int[] IMAGE_IDS = { R.drawable.image1, R.drawable.image2,
        R.drawable.image3};



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


    ib_left_arrow = (ImageButton) findViewById(R.id.iv_left_arrow);
    ib_right_arrow = (ImageButton) findViewById(R.id.iv_right_arrow);

    ib_left_arrow.setOnClickListener(this);
    ib_right_arrow.setOnClickListener(this);


}


    @Override
public void onClick(View v) {
    // TODO Auto-generated method stub


switch (v.getId()) {
    case R.id.iv_left_arrow:

      slidingimage = (ImageView) findViewById(R.id.ImageView3_Left);

      slidingimage.setBackgroundResource(IMAGE_IDS[currentimageindex% IMAGE_IDS.length]);

      currentimageindex--;

      rotateimage = AnimationUtils.loadAnimation(this,R.anim.slide_in_left);

      slidingimage.startAnimation(rotateimage);        

        break;



case R.id.iv_right_arrow:


      slidingimage = (ImageView) findViewById(R.id.ImageView3_Left);

 slidingimage.setBackgroundResource(IMAGE_IDS[currentimageindex % IMAGE_IDS.length]);

     currentimageindex++;

    rotateimage = AnimationUtils.loadAnimation(this,R.anim.slide_in_right);

    slidingimage.startAnimation(rotateimage);   

    break;              


       }
    }

 }

任何想法 ???

4

2 回答 2

2

你的代码有缺陷。您的索引从 0 开始。

如果我第一次与您的应用程序交互时按下左箭头,索引将变为-1。当您尝试从具有 -1 模长度数组的数组中获取值时,它将返回一个负值。

这可能会导致您从数组中获取错误的值,因此可能会显示错误的图像。

一个简单的解决方法是在 index 为 0 并按下左键时导致 index 翻转:

case R.id.iv_left_arrow:

   if(currentImageIndex == 0)
           currentImageIndex = IMAGE_IDS.length - 1 ;

那应该解决它。

于 2013-05-31T05:32:52.690 回答
1

尝试像这样从代码中删除模运算符

switch (v.getId()) {
case R.id.iv_left_arrow:
    // should not execute if it is on the first item
    if (currentimageindex > 0) {
        currentimageindex--;

        slidingimage = (ImageView) findViewById(R.id.ImageView3_Left);
        slidingimage.setBackgroundResource(IMAGE_IDS[currentimageindex]);
        rotateimage = AnimationUtils.loadAnimation(this,R.anim.slide_in_left);
        slidingimage.startAnimation(rotateimage);
    }        
    break;

case R.id.iv_right_arrow:
    // should not execute if it's on the last item
    if (currentimageindex < IMAGE_IDS.length) {
        currentimageindex++;

        slidingimage = (ImageView) findViewById(R.id.ImageView3_Left);
        slidingimage.setBackgroundResource(IMAGE_IDS[currentimageindex]);
        rotateimage = AnimationUtils.loadAnimation(this,R.anim.slide_in_right);
        slidingimage.startAnimation(rotateimage); 
    }  
    break; 

没有对此进行测试,但这应该可以解决您的问题。

我建议您不要使用这种转换图像的方法,因为您将来会遇到问题。而是使用ViewPager. 此控件专门设计用于执行此操作。您还可以查看ViewFlipper控件。这两个控件可帮助您定义图像列表以及通过 a 对它们进行回收Adapter,如果您将拥有大量图像,这一点非常重要。

于 2013-05-31T05:45:44.560 回答