如何从imageView获取可绘制的名称

时间:2017-10-21 12:40:56

标签: java android random

我有一个应用程序,可在活动打开时创建随机图像。随机图像阵列中有30个图像。生成图像,但我想要的是将可绘制的名称写入textview。它看起来像这样:

<script src="js/angular.min.js"></script>   
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular-route.js"></script>   

目前我收到数字,我无法弄清楚如何将int转换为字符串,或者如何使用生成器生成字符串,在textview中显示然后将其转换为int以在ImageView的。

我创建了另一个活动,我可以在其中选择我想要从微调器中看到的图像,它只是将带有字符串的选定选项发送到按下按钮时的下一个活动,而在另一个活动中我删除.png和res / drawable / from the string,并将字符串转换为int以显示图像。

    ImageView RImage= (ImageView) findViewById(R.id.image);
    RImage.setImageResource(generator());

    Drawable myDrawable = RImage.getDrawable();

    TextView writeID = (TextView) findViewById(R.id.idtext);
    writeID.setText(String.valueOf(generator()));
}

private int generator() {
    TypedArray imgs = getResources().obtainTypedArray(R.array.list3);
    int imgid = imgs.getResourceId(new Random().nextInt(imgs.length()), -1);
    imgs.recycle();
    return imgid;
}

所以我需要生成器生成字符串然后将其转换为int。谢谢!

2 个答案:

答案 0 :(得分:1)

通过使用方法

int ID转换为String名称来更改代码
getResourceEntryName(int id);

更改行

writeID.setText(String.valueOf(generator()));

类似于:

writeID.setText(getResources().getResourceEntryName(generator()));

对于Viceversa:

如果你有一个String让我们假设这个String你从textView获得或使用上面的方法将它转换回int id你会做以下事情:

int id= getResources().getIdentifier("your_string_here", "drawable", getPackageName());

如果您要调用Fragment而不是Activity的代码,请记得在致电getActivity()之前或致电getResources()之前放置getPackageName()。 我没有在输入时测试代码,但我相信它会起作用(可能是一个错字),有关更多信息,请考虑参阅资源上的文档from this official link

答案 1 :(得分:0)

如果我理解正确,你需要的是看看getResourceName(int)方法 - 它通过id返回资源名称。您还可以使用getIdentifier(String,String,String)方法按名称检索资源ID。

如果要显示随机选择的图像的名称,您应该将生成的资源ID保存到变量中并获取相应的资源名称,而不是两次调用const int n = 1000; int dayarray[n]; int montharray[n]; int yeararray[n]; for (int k = 2016; k < 2018; k++) { // for loop for years 2016 to 2017 for (int j = 1; j < 13; j++) { // for loop for month for (int i = 1; i < 32; i++) { // for loop for day dayarray[??] = i; montharray[??] = j; yeararray[??] = k; } } } 方法,因为您将获得两个不同的ids。