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函数中使用
有关随机数的更多信息,请参见:如何在Android中生成特定范围内的随机数?