更改按钮上的不同图像单击android

时间:2017-11-12 03:24:19

标签: java android imageview imageswitcher

所以,我想创建一个包含两个按钮'next'和'previous'的Image Switcher。每当我点击“下一步”按钮时,它将切换到下一个图像,“上一个”按钮将切换到上一个图像。我使用数组存储所有图像网址,假设我有图像1,当我点击“下一步”按钮时,它将切换到图像2,依此类推。现在我只能在两张图片之间切换,这是我的代码。

更新: 我已经更新了我的代码,这次我可以在图像之间切换,但应用程序会在某个时间崩溃。有什么想法吗?

XML

<ImageSwitcher
    android:id="@+id/images"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"/>


<ImageButton
    android:id="@+id/btnleft"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="23dp"
    android:layout_marginStart="90dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:src="@android:drawable/ic_media_rew"
    android:background="@android:color/holo_green_light"/>

<ImageButton
    android:id="@+id/btnRight"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="91dp"
    android:layout_alignTop="@+id/btnleft"
    android:layout_alignParentEnd="true"
    android:src="@android:drawable/ic_media_ff"
    android:background="@android:color/holo_green_light"/>

Main.java

public class MainActivity extends AppCompatActivity {

private ImageSwitcher imageSwitcher;
private ImageButton buttonLeft, buttonRight;
public static int currentIndex=0;
private static String url[] = new String[]{
        "https://pbs.twimg.com/profile_images/875443327835025408/ZvmtaSXW_400x400.jpg",
        "http://www.ipbrief.net/wp-content/uploads/2012/05/262px-Android_dance.svg_.png",
        "http://quizzzz.net/en/logo/images/1342886140.jpg",
        "https://androiddevsimplified.files.wordpress.com/2016/01/android-logo-png-05073.png"
};


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

    imageSwitcher = (ImageSwitcher)findViewById(R.id.images);

    buttonLeft = (ImageButton)findViewById(R.id.btnleft);

    buttonRight = (ImageButton)findViewById(R.id.btnRight);

    imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
        @Override
        public View makeView() {
            // Returns the context for the entire application (the process all the Activities are running inside of)
            ImageView imageView = new ImageView(getApplicationContext());

            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);

            imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT));
            return imageView;
        }
    });

    imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left));
    imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right));


    buttonRight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(currentIndex < url.length)
                LoadingImage(url[currentIndex++]);
        }
    });

    buttonLeft.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           if(currentIndex > 0)
               LoadingImage(url[currentIndex--]);
        }
    });
}

private void LoadingImage(final String url){
    ImageLoader imageLoader = Singleton.getInstance(getApplicationContext()).getImageLoader();
    imageLoader.get(url, new ImageLoader.ImageListener(){

        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Error", error.getMessage());

        }

        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
            Bitmap image = response.getBitmap();
            Drawable drawable = new BitmapDrawable(getResources(),image);
            imageSwitcher.setImageDrawable(drawable);
        }
    });
}

}

2 个答案:

答案 0 :(得分:0)

我真的不知道你面临的问题。您想要从列表中更改图像,但只需在数组中使用索引0和1加载图像。

使用全局变量存储当前图像索引。

currIndex = 0;

btnNext.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(currIndex < url.length() - 1) {
            loadingImage(url[currIndex],0);
            imgView[1].setImageResource(0);
        }
    }
});

btnPrevious.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(currIndex > 0) {
            loadingImage(url[currIndex],1);
            imgView[0].setImageResource(0);
        }
    }
});

答案 1 :(得分:-2)

根据新APIimageLoader.get(url)更改为loadurl(url)

更改

imageLoader.get(url, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                Bitmap img = response.getBitmap();
                imgView[i].setImageBitmap(img);
            }

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("Error",error.getMessage());

            }
        });

// Load image, decode it to Bitmap and return Bitmap to callback
        imageLoader.loadImage(url, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                // Do whatever you want with Bitmap
                imgView[i].setImageBitmap(img);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                Log.e("Error", failReason.getCause().getMessage());
            }
        });