Ich habe so ein Array.
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};
Im Moment habe ich 6 Bilder, also bekomme ich statisch den Namen.
Wenn ich etwa 50 Bilder habe, kann ich nicht jeden Dateinamen im Array angeben. Es muss also dynamisch sein, wie ich das erreichen kann.
Sie können getIdentifier()
verwenden.
for (int j = 1; j < 6; j++) {
Drawable drawable = getResources().getDrawable(getResources()
.getIdentifier("d002_p00"+j, "drawable", getPackageName()));
}
Sie können dies auch verwenden:
int res = getResources().getIdentifier("<your pakecgename>:drawable/abc", null, null);
So etwas könnte funktionieren
Field[] drawables = Android.R.drawable.class.getFields();
for (Field f : drawables) {
try {
System.out.println("R.drawable." + f.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
Verwenden Sie die folgende Zeile, um dynamisch gezeichnet zu werden:
Drawable drawable = this.getResources().getDrawable(R.drawable.yourDrawableID);
Dadurch erhalten Sie das gewünschte Zeichen.
public static Drawable getImage(Context context, String name) {
return context.getResources().getDrawable(context.getResources().getIdentifier(name, "drawable", context.getPackageName()));
}
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()));
}
}
Wir können Imageview setImageResource nutzen, da dies effizienter ist als drawable scheint, siehe Code für denselben Code.
Der folgende Code kann verwendet werden, um das Bild wie bei GIF anzuzeigen, wenn Sie ein mehrteiliges Bild von GIF haben. Teilen Sie einfach das GIF in ein einzelnes PNG aus einem Online-Tool auf und platzieren Sie das Bild in der Zeichenfolge wie in der folgenden Reihenfolge
image_1.png, image_2.png usw.
Bitten Sie den Handler, das Bild dynamisch zu ändern.
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);
//
}
});
}
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);
}
}