2012-02-06 76 views
42

我有一个这样的数组。如何从可绘制文件夹动态获取图像

int image[] = {R.drawable.d002_p001,R.drawable.d002_p002,R.drawable.d002_p003, 
        R.drawable.d002_p004,R.drawable.d002_p005,R.drawable.d002_p006}; 

现在我有6张图片,所以我静态地给出了名字。

如果我有50个图像,我不能给每个文件名的数组,所以它需要是动态的我怎么能做到这一点。

+0

看看这个[教程](http://www.anddev.org/viewtopic.php?t=575)希望它可以帮助! – 2012-02-06 07:24:37

回答

104

您可以使用getIdentifier()

for (int j = 1; j < 6; j++) { 
    Drawable drawable = getResources().getDrawable(getResources() 
        .getIdentifier("d002_p00"+j, "drawable", getPackageName())); 
} 
+0

如何从该'drawable'保存到String数组? – 2015-07-22 15:03:54

+0

getDrawable需要API级别 – 2015-09-09 19:32:36

+1

@TomBrito使用ContextCompat.getDrawable(context,res)。请参阅http:// stackoverflow。com/a/34132342/4830897 – SleepProgger 2016-08-16 20:10:50

-9

使用这个代码来创建数组,并在以后使用该数组

int image[] = new int[50]; 
for (int i = 1 ; i <= 50 ; i++) 
{ 
images[i] = "R.drawable.d002_p00"+i; 
} 

你要照顾主要的是文件名必须以“d002_p00”启动此之后有数字1到50

+1

它显示我错误的家伙“R.drawable.d002_p00”+我;不能从int转换为字符串 – Goofy 2012-02-06 07:26:05

+5

这个答案真的很糟糕...你有没有学过java?一个'String'不能被分配给一个int变量...并且一个int不能被添加到一个字符串中而不使用'String.valueof()'... – maysi 2013-08-30 18:44:03

+0

Mr.dilipkaklotar一些代码不对,所以改变我们的这里并更新你的后 – 2017-11-16 06:08:42

2

使用以下命令行进行动态获取绘制:

Drawable drawable = this.getResources().getDrawable(R.drawable.yourDrawableID); 

这会给你想要的绘制对象。

+0

什么是yourDrawableID这里 – Goofy 2012-02-06 07:30:35

+0

'yourDrawableID'是您为layout(xml)文件中的元素指定的实际'ID'值。 – astuter 2014-04-25 13:18:46

6

像这样的东西可以工作

Field[] drawables = android.R.drawable.class.getFields(); 
for (Field f : drawables) { 
    try { 
     System.out.println("R.drawable." + f.getName()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

这匹配我得到所有drawables。我将所有内容放在Hashmap中以便稍后访问:KEY = f.getInt(f.getName())+ VALUE = f.getName() – user4500 2014-05-22 18:52:57

11

您也可以使用此:

int res = getResources().getIdentifier("<your pakecgename>:drawable/abc", null, null); 
+0

使用''drawable',getPackageName()'而不是'null,null'不太容易出错 – 2017-05-27 22:19:53

2
public static Drawable getImage(Context context, String name) { 
     return context.getResources().getDrawable(context.getResources().getIdentifier(name, "drawable", context.getPackageName())); 
} 
1
String[] names = new String []{"yout names..."}; 
    for(String n: names) { 
     Utils.GetDrawableByName(n,this); 
    } 

public class Utils { 
public static Drawable GetDrawableByName(String name,Activity context){ 
    Resources res = context.getResources(); 
    return res.getDrawable(res.getIdentifier(name,"drawable",context.getPackageName())); 
    } 
} 
0

我们可以利用Imageview的setImageResource,因为这会比drawable更高效,请参考下面的代码。

下面的代码可以用来显示像gif incase的图像,如果你有多个gif拆分图像。刚刚从一个在线工具拆分成GIF PNG个人,并把图像像的绘制如下顺序

image_1.png,image_2.png等

有处理程序,以动态地改变形象。

int imagePosition = 1; 
    Handler handler = new Handler(); 
     Runnable runnable = new Runnable() { 
      public void run() { 
       updateImage(); 
      } 
     }; 




    public void updateImage() { 

       appInstance.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         int resId = getResources().getIdentifier("image_" + imagePosition, "drawable", appInstance.getPackageName()); 
         gifImageViewDummy.setImageResource(resId); 
         imagePosition++; 
    //Consider you have 30 image for the anim 
         if (imagePosition == 30) { 
//this make animation play only once 
          handler.removeCallbacks(runnable); 

         } else { 
    //You can define your own time based on the animation 
          handler.postDelayed(runnable, 50); 
         } 

//to make animation to continue use below code and remove above if else 
// if (imagePosition == 30) 
//imagePosition = 1; 
// handler.postDelayed(runnable, 50); 
// 
        } 
       }); 
       } 
0
package com.example.studio.snakes; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageView; 

import java.util.Random; 

public class MainActivity extends AppCompatActivity { 

int[] dices = { 
     R.drawable.one, 
     R.drawable.two, 
     R.drawable.three, 
     R.drawable.four, 
     R.drawable.five, 
     R.drawable.six, 
}; 


public void rollTapped(View view){ 
Log.i("Button","Button Tapped"); 
    Random rand = new Random(); 
    int randomnum = rand.nextInt(6); 
    Log.i("Random","Random number is " + randomnum); 
    ImageView dice=findViewById(R.id.imageView2); 
    dice.setImageResource(dices[randomnum]); 


} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
} 
+0

这里我创建了可绘制文件夹中图像的数组骰子。并且我通过生成随机变量来随机访问图像作为randnum(从代码)。在这里,我一直在改变已经存在的图像(id是imageView2从代码)每个随机数。每当我们点击一​​个buttom图像将随机生成 – 2018-03-09 01:49:23

+0

嗨安瓦尔shanib,欢迎[so] 。请注意[注释是临时的,可以随时删除](https://stackoverflow.com/help/privileges/comment)。如果您需要提供其他信息,请点击帖子下方的“[edit]”**链接更新您的答案。有关详细信息,请参见(https://meta.stackexchange.com/q/19756/204869)。谢谢。 – Pang 2018-03-09 01:51:02

相关问题