需要帮助在活动负载和按钮按下时显示随机选择的图像

时间:2010-07-17 00:36:32

标签: java android random imageview

我正在尝试创建一个只在加载时加载随机图像的活动。它编译精细,加载精细。但根本行不通。我有什么想法吗?它让我的眼睛流血。

------------这里我的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);

它仍然无法正常工作

1 个答案:

答案 0 :(得分:2)

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


其他改进:

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

这是一种更有效的方式;将iv声明为您活动的实例变量:

private ImageView iv;

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

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

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

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

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