【问题标题】:Change different images on button click android更改按钮单击android上的不同图像
【发布时间】:2017-11-12 03:24:18
【问题描述】:

所以,我想创建一个包含两个按钮“下一个”和“上一个”的图像切换器。每当我单击“下一个”按钮时,它将切换到下一个图像,而“上一个”按钮将切换到上一个图像。我正在使用一个数组来存储所有图像 url,假设我有 image1,当我单击“下一步”按钮时,它将切换到 image2,依此类推。目前我只能在两个图像之间切换,这是我的代码。

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

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);
        }
    });
}

}

【问题讨论】:

  • 你想从数组中加载图片为什么只使用固定的url[0]和url[1]?

标签: java android imageview imageswitcher


【解决方案1】:

我真的不知道您面临的是哪个问题。您想从列表中更改图像,但您只加载数组中索引为 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);
        }
    }
});

【讨论】:

    【解决方案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());
                }
            });
    

    【讨论】:

    • 只有试试这个的答案和代码转储在这里没有用处,因为它们不传授任何知识。发帖者为什么要试试这个?它如何具体解决问题,为什么要解决它?本网站用于分享知识和指导人们,不提供没有其他信息的复制/粘贴答案。见this Meta StackExchange post
    • 好的,我明白了。我刚刚使用 op 提供的代码创建了一个应用程序。我已经编辑了答案以解释问题出在哪里
    • 我没有看到您添加的任何解释任何内容。为什么这种变化是相关的?它如何具体解决问题?如果你不愿意解释你的答案是一个解决方案,那它就不是一个答案。请阅读我提供的链接。另见具体this answer to that Meta SE question
    • 您没有添加进一步的解释。你甚至没有读我写的东西。您没有试图提供解释;您只是提供复制/粘贴代码。该网站用于分享知识和帮助教育他人。复制/粘贴使用此不向任何人提供任何知识或任何教育;它只是提供代码。
    猜你喜欢
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 2011-12-14
    • 2015-05-09
    • 2013-11-05
    相关资源
    最近更新 更多