同时更改多个ImageView的图像

3

在我的Android应用程序中,我有一个活动,在一个单独的ScrollView中有20个不同的ImageViews。我需要能够高效地同时更改每个单独的ImageView的图像。哪种Java代码适合做到这一点?

这是我声明ImageViews的方式:

private ImageView imageView1;
imageView1 = (ImageView) findViewById(R.id.imageView1);
...
...
private ImageView imageView20;
imageView20 = (ImageView) findViewById(R.id.imageView20);

有没有一种方法可以预加载新图像,以使“更改过程”更加高效? - Peter
使用数组来存储ImageView的ID。使用循环和((ImageView)findViewById(i)).setImageResource();来设置图片资源。 - Jyoti JK
或者使用ListView、RecyclerView或GridView,因为它们都是图像。 - Jyoti JK
我同意@JyotiJK的观点。如果全部都是ImageView,你需要使用RecyclerView。 - Hitesh Sarsava
即使所有的图片同时显示在屏幕上? - Peter
@Peter 是的,你可以使用它。 - Jyoti JK
2个回答

0

希望这能对你有所帮助,请仔细研究这个例子,看看它是否符合你的要求:

package com.my.example;

import android.app.Activity;
import android.app.*;
import android.os.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import android.content.*;
import android.content.res.*;
import android.graphics.*;
import android.graphics.drawable.*;
import android.widget.ImageView;
import java.util.Timer;
import java.util.TimerTask;


public class MainActivity extends  Activity { 

private Timer _timer = new Timer();

private double counterForImageView1 = 0;
//...
private double counterForImageView20 = 0;
private double duration = 1000;

//duration determinates when the images will be changed
//every image will be displayed for a certain amount of time then it gets changed
//in this example duration = 1000 which means that every image will be displayed for 1000 milliseconds ( 1 second )

private ImageView imageview1;
//...
private ImageView imageview20;

private TimerTask imagesChanger;
@Override
protected void onCreate(Bundle _savedInstanceState) {
    super.onCreate(_savedInstanceState);
    setContentView(R.layout.main);
    initialize(_savedInstanceState);
    initializeLogic();
}

private void initialize(Bundle _savedInstanceState) {
    
    imageview1 = (ImageView) findViewById(R.id.imageview1);
    //...
    imageview20 = (ImageView) findViewById(R.id.imageview20);
}

private void initializeLogic() {
    imagesChanger = new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    switch((int)counterForImageView1) {
                        case ((int)0): {
                            imageview1.setImageResource(getResources().getIdentifier("image1_for_imageview1", "drawable", getPackageName()));
                            counterForImageView1++;
                            break;
                        }
                        case ((int)1): {
                            imageview1.setImageResource(getResources().getIdentifier("image2_for_imageview1", "drawable", getPackageName()));
                            counterForImageView1++;
                            break;
                        }
                        case ((int)2): {
                            imageview1.setImageResource(getResources().getIdentifier("image3_for_imageview1", "drawable", getPackageName()));
                            counterForImageView1 = 0;
                            break;
                        }
                            //the amount of cases depends on the amount of images you want to display for every ImageView
                    }
                    //...
                    switch((int)counterForImageView20) {
                        case ((int)0): {
                            imageview1.setImageResource(getResources().getIdentifier("image1_for_imageview20", "drawable", getPackageName()));
                            counterForImageView20++;
                            break;
                        }
                        case ((int)1): {
                            imageview1.setImageResource(getResources().getIdentifier("image2_for_imageview20", "drawable", getPackageName()));
                            counterForImageView20++;
                            break;
                        }
                        case ((int)2): {
                            imageview1.setImageResource(getResources().getIdentifier("image3_for_imageview20", "drawable", getPackageName()));
                            counterForImageView20 = 0;
                            break;
                        }
                    }
                }
            });
        }
    };
    _timer.scheduleAtFixedRate(imagesChanger, (int)(0), (int)(duration));
}

@Override
protected void onActivityResult(int _requestCode, int _resultCode, Intent _data) {
    
    super.onActivityResult(_requestCode, _resultCode, _data);
    
    switch (_requestCode) {
        
        default:
        break;
    }
}

}

0

假设您有N个图像R.drawable.image1,R.drawable.image2,...,R.drawable.imageN,您想在N个ImageView imageView1,imageView2,...,imageViewN中显示它们。

此代码将为每个图像视图动态分配图像,而无需预先初始化视图,因为它们太多了。

        //here the drawbles you will display in the image views 
        final int[] images = {R.drawable.image1, R.drawable.image2};
        for (int i = 0; i < images.length; i++) {
            //get the image view id dynamically R.id.imageView1..
            int resourceId = this.getResources().getIdentifier("imageView" + (i+1), "id", this.getPackageName());
            ImageView imageView = findViewById(resourceId);
            int imageId = images[i];
            imageView.setImageResource(imageId);
        }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接