所以,我想创建一个包含两个按钮'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);
}
});
}
}
答案 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)
根据新API从imageLoader.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());
}
});