java - 需要帮助在 Activity 加载和按下按钮时显示随机选择的图像

标签 java android random imageview

我正在尝试制作一个在加载时只加载随机图像的 Activity 。它编译得很好,加载也很好。但根本行不通。任何想法我做错了什么?它让我的眼睛流血。

------------这是我的 RandomImage 类-------------------------------- ------

package com.package.name; 

import java.util.Random; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageView; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View.OnClickListener; 

public class RandomImage extends Activity implements OnClickListener{ 
    private static final Random rgenerator = new Random(); 
    Integer [] mImageIds = { 
            R.drawable.pictureone, 
            R.drawable.picturetwo, 
            R.drawable.picturethree, 
            }; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.randomimage); 
    Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)]; 
    ImageView iv = (ImageView) findViewById(R.id.imageviewyeah); 
    iv.setTag(q); 
    View nextButton = findViewById(R.id.next_image_button); 
    nextButton.setOnClickListener(this); 
} 

    @Override 
    public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.next_image_button: 
        Intent i = new Intent(this, RandomImage.class); 
        startActivity(i); 
        break; 
    } 
} 

    @Override 
        public boolean onCreateOptionsMenu (Menu menu) { 
                super.onCreateOptionsMenu(menu); 
                MenuInflater inflater = getMenuInflater(); 
                inflater.inflate(R.menu.menu3, menu); 
                return true; 
        } 
@Override 
public boolean onOptionsItemSelected (MenuItem item) { 
                switch (item.getItemId()) { 
                case R.id.menu: 
                        startActivity(new Intent(this, Main.class)); 
                        return true; 
} 

return false; 
        } 
}

------------这是我的布局-------------------------------- ------

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/widget0" 
android:background="@drawable/nhiebg" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
    android:layout_gravity="center" > 
<ImageView 
        android:id="@+id/imageviewyeah" 
        android:tag="q" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center"> 
</ImageView> 
<Button 
        android:id="@+id/next_image_button" 
        android:text="Next Image" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:padding="10dip" 
        android:typeface="serif"/> 
</LinearLayout>

谢谢你提供的巨大帮助,我试过你说的。但是,它只是在开始时加载随机图像,按钮什么都不做。我按下它,然后出现的图像消失了,没有任何东西出现在它的位置上。一大堆东西通过 logcat,但这里是前两行

07-17 04:15:33.102: WARN/ResourceType(30476): 获取资源编号 0x00000002 的值时没有包标识符 07-17 04:15:33.112: WARN/ImageView(30476): 无法找到资源:2

----------------------------我现在有什么---------------- --------------

public class RandomImage extends Activity implements OnClickListener{


    private Integer [] mImageIds = { 
            R.drawable.one, 
            R.drawable.two, 
            R.drawable.three, 
            };
    private static final Random rgenerator = new Random();

    private ImageView iv;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.randomimage);


    Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];

    iv = (ImageView) findViewById(R.id.imageviewyeah);
    iv.setImageResource(q);


    View nextButton = findViewById(R.id.next_image_button);
    nextButton.setOnClickListener(this);

}


    @Override
    public void onClick(View v) {
    switch (v.getId()) {
    case R.id.next_image_button:
        iv.setImageResource(rgenerator.nextInt(mImageIds.length));
        break;
    }

}

我还想指出,我尝试删除线条

Integer q = mImageIds[rgenerator.nextInt(mImageIds.length)];

和线

and iv.setImageResource(q);

还是不行

最佳答案

尝试使用 iv.setImageResource(q) 而不是 iv.setTag(q)


其他改进:

您当前的方法在显示新的随机图像的意义上是有效的,但它最终也会不必要地创建一个新的 RandomImage Activity ,这会耗尽内存和处理能力(每次按下按钮时)。

这里有一个更高效的方法;将 iv 声明为您的 Activity 的实例变量:

private ImageView iv;

并在您的 onCreate() 中实例化它(只需删除“ImageView”):

iv = (ImageView) findViewById(R.id.imageviewyeah);

这意味着您只需在 Activity 期间设置一次。然后,在 onClick() 中,替换

Intent i = new Intent(this, RandomImage.class); 
startActivity(i); 
break; 

iv.setImageResource(mImageIds[rgenerator.nextInt(mImageIds.length)]);

关于java - 需要帮助在 Activity 加载和按下按钮时显示随机选择的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3269701/

相关文章:

Java - 这是好的编程习惯吗?

java - 自定义电话号码的正则表达式?

java - 在android studio中获取带有标记的当前位置

android - 屏幕关闭时检查音量按钮的使用情况

java - 如何使用 eclipse debug 识别谁调用了 gwt 服务?

java - 是否有可能在 javafx 中有一个透明的实用程序阶段?

java - 滚动时 ListView 项目未锁定

javascript - 如何在电话号码格式 postman 范围内生成随机数

c++ - 提高 Qt 5.3 中随机数生成的质量

java - 如何使数组的前半部分是从 0 到 7 的随机整数,后半部分是数组前半部分的随机成员,但只能选择一次