【问题标题】:Generation of random Image by tapping on imageView通过点击 imageView 生成随机图像
【发布时间】:2016-06-29 08:20:11
【问题描述】:

当我点击 imageView 时,我只想从可绘制的图像中生成一个随机图像。每当我运行此代码时,模拟器上的应用程序都会崩溃。这段代码有什么问题:

package com.example.surya.musicpleer;

import android.app.Activity;
import android.graphics.Typeface;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.Random;

public class MainActivity extends Activity {

ImageView i1;
Random r = new Random();
int target = r.nextInt(3);
String drawablename = "photo" + target;

int resID = getResources().getIdentifier(drawablename, "drawable",  getPackageName());

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    i1 =(ImageView)findViewById(R.id.imageView);
    i1.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            i1.setImageResource(resID);
        }
    });
        }

}

【问题讨论】:

  • 崩溃的堆栈跟踪是什么?
  • 询问了无数次,您对getResources() 的调用为时过早......上下文尚未准备好
  • 正确的做法是什么?
  • 在此处发布 logcat 错误
  • 引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.content.res.Resources android.content.Context.getResources()'

标签: java android random


【解决方案1】:

我已经修改了您的代码,只需复制并粘贴即可,您的问题是您正在使用 onCreate() 方法创建随机编号并访问资源

 package com.example.surya.musicpleer;

import android.app.Activity;
import android.graphics.Typeface;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.Random;

public class MainActivity extends Activity {

    ImageView i1;
    Random r = new Random();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        i1 = (ImageView) findViewById(R.id.imageView);
        i1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                int target = r.nextInt(3);
                String drawablename = "photo" + target;

                int resID = getResources().getIdentifier(drawablename, "drawable", getPackageName());

                i1.setImageResource(resID);
            }
        });
    }
}

您需要将四张图片放入可绘制对象中,例如 photo0 到 photo3

编辑

不幸的是,没有任何方法可以获取 imageview 的可绘制性,但您可以通过setTag() 到 imageview 来实现,如下所示

i1.setImageResource(resID);
i1.setTag(resID); // this line is importent 

& 使用此方法获取该标签

private int getDrawableId(ImageView iv) {
    return (Integer) iv.getTag();
}

现在您可以比较上述方法返回的值,如果它们相同意味着两个图像视图具有相同的可绘制对象。

【讨论】:

  • 非常感谢..现在我也要为另一个 imageView 做,但如果两个图像相同,我想这样做,那么我需要像你赢的那样弹出一个窗口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2020-07-02
  • 2015-02-21
  • 1970-01-01
  • 2013-02-16
  • 2012-03-13
  • 1970-01-01
相关资源
最近更新 更多