如何在android中使用clicklistener按钮更改图像的下一个和上一个?

如何在android中使用clicklistener按钮更改图像的下一个和上一个?,android,button,view,Android,Button,View,我有“下一步”和“上一步”按钮,用于更改图像。活动启动时,图像来自上一个活动。我使用bundle对象获取当前活动的图像。实际上,有两个图像用于传递包(内部图像和外部图像)。一个图像在第二个图像上重叠,并在自定义视图上设置。现在我想当任何图像来自捆绑,然后我按下下一步按钮或上一步按钮,然后根据位置图像将被改变。例如,像字母表这样的图像。当我按下D按钮时,它会显示在我使用bundle的活动中;当我按下next按钮时,E图像会显示;当我按下previous按钮时,C图像会显示。下面是我的代码 priv

我有“下一步”和“上一步”按钮,用于更改图像。活动启动时,图像来自上一个活动。我使用bundle对象获取当前活动的图像。实际上,有两个图像用于传递包(内部图像和外部图像)。一个图像在第二个图像上重叠,并在自定义视图上设置。现在我想当任何图像来自捆绑,然后我按下下一步按钮或上一步按钮,然后根据位置图像将被改变。例如,像字母表这样的图像。当我按下D按钮时,它会显示在我使用bundle的活动中;当我按下next按钮时,E图像会显示;当我按下previous按钮时,C图像会显示。下面是我的代码

private DrawingView mDrawingView;

Bundle extras = getIntent().getExtras();
    int imageRes1 = extras.getInt("picture1");
    int imageRes2 = extras.getInt("picture2");
    mDrawingView = (DrawingView) findViewById(R.id.drawing_view);
    mDrawingView.setShape(imageRes1, imageRes2);
    btn_next = (Button) findViewById(R.id.btn_next);
    //      btn_next.setOnClickListener(this);
            btn_next.setOnClickListener(new OnClickListener() {

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

                    initializeMP();
                    playsound.start();




                    if(imageRes1==R.drawable.img_a_inner||imageRes2==R.drawable.img_a){
                        mDrawingView.setShape(R.drawable.img_b_inner, R.drawable.img_b);
                        index++;
                    }
                    else if(imageRes1==R.drawable.img_b_inner||imageRes2==R.drawable.img_b){
                        mDrawingView.setShape(R.drawable.img_c_inner, R.drawable.img_c);
                        index++;
                    }
                    else if(imageRes1==R.drawable.img_c_inner||imageRes2==R.drawable.img_c){
                        mDrawingView.setShape(R.drawable.img_d_inner, R.drawable.img_d);
                        index++;
                    }
                    else if(imageRes1==R.drawable.img_d_inner||imageRes2==R.drawable.img_d){
                        mDrawingView.setShape(R.drawable.img_e_inner, R.drawable.img_e);
                        index++;
                    }
                }
            });


    btn_prev = (Button) findViewById(R.id.btn_prev);

    //      btn_prev.setOnClickListener(this);
            btn_prev.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    initializeMP();
                    playsound.start();


                    if(imageRes1==R.drawable.img_b_inner||imageRes2==R.drawable.img_b){
                        mDrawingView.setShape(R.drawable.img_a_inner, R.drawable.img_a);
                        index--;
                    }
                    else if(imageRes1==R.drawable.img_c_inner||imageRes2==R.drawable.img_c){
                        mDrawingView.setShape(R.drawable.img_b_inner, R.drawable.img_b);
                        index--;
                    }
                    else if(imageRes1==R.drawable.img_d_inner||imageRes2==R.drawable.img_d){
                        mDrawingView.setShape(R.drawable.img_c_inner, R.drawable.img_c);
                        index--;
                    }
            });

        }

如果您事先有所有图像的列表,请将它们声明为数组

否则,您可以使用bundle和getIntArray()和putIntArray()传递它们

现在,你有这样的图像列表

// These are can be declared as member or static variables.
int[] innerPictures = {R.drawable.image_a_inner, R.drawable.image_b_inner, ...}
int[] pictures = {R.drawable.image_a, R.drawable.image_b, ...}

您需要在第一次显示图像的索引,它也可以作为额外的

int displayingIndex = extra.getInt("pictureIndex"); // it has to be member variable to use inside of listener
代码如下所示

private DrawingView mDrawingView;
Bundle extras=getIntent().getExtras();
int[]innerPictures=。。。
int[]图片=。。。
displayindex=extra.getInt(“pictureIndex”);
mDrawingView=(DrawingView)findViewById(R.id.drawing\u视图);
mDrawingView.setShape(内部图片[displayingIndex],图片[displayingIndex]);
btn_next=(按钮)findviewbyd(R.id.btn_next);
btn_next.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
initializeMP();
playsound.start();
if(displayingIndex+1==innerPictures.length)返回;
显示索引++;
mDrawingView.setShape(内部图片[displayingIndex],图片[displayingIndex]);
}
});
btn_prev=(按钮)findviewbyd(R.id.btn_prev);
btn_prev.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
initializeMP();
playsound.start();
如果(displayindex==0)返回;
显示索引--;
mDrawingView.setShape(内部图片[displayingIndex],图片[displayingIndex]);
});

}
尝试将所有图像作为int数组传递,同时传递当前索引,然后尝试在单击按钮的基础上移动下一个和上一个。我已经尝试过了,但没有成功。点击下一步按钮进行比较后,图像更改一次。我得到java.lang.ArrayIndexOutOfBoundsException:length=27;index=2130837574使用此代码我为您编写了一个示例,它不打算按原样使用。无论如何,似乎您在显示索引、显示stacktrace和代码方面有问题;imageRes1++;mDrawingView.setShape(img_内部[imageRes1],img_简单[imageRes2]);在oncreate()上,我输入了以下代码:mDrawingView.setShape(img_inner[imageRes1],img_simple[imageRes2]);你为什么有imageRes2?我认为图像是像image_a_internal和image_a一样成对使用的,因此需要一个变量作为索引,而不是两个索引。如果您想使用两个变量,您必须从bundle中检索它们,而不是其中一个,并在侦听器中操作它们。我的意思是,如果您想对内部图像和另一个图像分别使用两个索引,则需要在侦听器中添加和减去这两个索引。另外,请检查这两个属性的数组绑定。
int displayingIndex = extra.getInt("pictureIndex"); // it has to be member variable to use inside of listener