关于android:如何在随机时间后自动显示图像

how to Display Image automatically after a random time

我构建了一个Android应用程序,我希望在随机时间后逐个显示图像。
手段

图1显示

10秒后

图2显示

30秒后

图3显示

50秒后

图4显示

我有显示图像的代码但它每隔10秒连续显示图像,而我想在随机时间后显示图像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MainActivity extends Activity {
  ImageView imageView;


 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     imageView = (ImageView) findViewById(R.id.imageView1);
     final int []imageArray=
       {R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e};


       final Handler handler = new Handler();
        Runnable runnable = new Runnable() {
        int i=0;
        public void run() {
            imageView.setImageResource(imageArray[i]);
            i++;
            if(i>imageArray.length-1)
            {
            i=0;    
            }
            handler.postDelayed(this, 10000);  //for interval...
         }

       };
      handler.postDelayed(runnable, 10000); //for initial delay..

      }

xml文件是 -

1
2
3
4
5
6
7
8
9
10
11
12
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

  </RelativeLayout>

我们还可以使用模块化算术概念来重复图像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int cimi;    
int img[] ={R.drawable.a,R.drawable.b,R.drawable.c,R.drawable.d,R.drawable.e,R.drawable.f};
// inside onCreate()..
i = (ImageView)findViewById(R.id.iv1);
Runnable runn = new Runnable() {
        @Override
        public void run() {
            i.setImageResource(img[cimi]);
            cimi++;
            cimi = cimi%img.length;
            i.postDelayed(this,2000);
        }
    };
    i.postDelayed(runn,2000);

设置最小和最大间隔:

1
2
static final float MIN_INTERVAL = 10000;
static final float MAX_INTERVAL = 20000;

然后是间隔:

1
handler.postDelayed(this, Math.rand()*(MAX_INTERVAL-MIN_INTERVAL) + MIN_INTERVAL);


尝试如下:

1
2
3
4
5
6
7
8
9
10
11
AnimationDrawable animation = new AnimationDrawable();
animation.addFrame(getResources().getDrawable(R.mipmap.download), 1000);
animation.addFrame(getResources().getDrawable(R.mipmap.downloada), 5000);
animation.addFrame(getResources().getDrawable(R.mipmap.ic_launcher), 3000);
animation.setOneShot(false);

ImageView imageAnim =  (ImageView) findViewById(R.id.img);
imageAnim.setBackgroundDrawable(animation);

// start the animation!
animation.start();

如果您希望图像之间有一段随机的时间,则需要使用随机数生成器。 例如:

1
2
Random r = new Random();
int timer = r.nextInt(60000-30000) + 30000;

然后你可以在你的run函数中使用handler.postDelayed(this, timer);,并且只要你想要生成一个新的随机数,只需再次调用r.nextInt

有关随机数的更多信息,请参见:如何在Android中生成特定范围内的随机数?