सवाल चित्रकारी फ़ोल्डर से छवियों को गतिशील रूप से कैसे प्राप्त करें


मेरे पास इस तरह की एक सरणी है।

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 छवियां हैं, तो मैं प्रत्येक फ़ाइल नाम को सरणी में नहीं दे सकता, इसलिए इसे गतिशील होने की आवश्यकता है, मैं इसे कैसे प्राप्त कर सकता हूं।


44
2018-02-06 07:08


मूल


कृपया एक नज़र इसे देखिये ट्यूटोरियल आशा करता हूँ की ये काम करेगा!! - Sanjay D


जवाब:


आप उपयोग कर सकते हैं getIdentifier()

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

106
2018-02-06 07:32



उस से कैसे बचें drawable एक स्ट्रिंग सरणी के लिए? - Srujan Barai
GetDrawable के लिए API स्तर 21 की आवश्यकता है - Tom Brito
@TomBrito ContextCompat.getDrawable (संदर्भ, res) का उपयोग करें। देख stackoverflow.com/a/34132342/4830897 - SleepProgger
यदि आप ".jpg" एक्सटेंशन के साथ किसी भी फ़ाइल की तलाश में हैं और फ़ाइलों की अज्ञात संख्या के लिए यह कैसे करेंगे? @LalitPoptani - Pj Rigor


आप इसका भी उपयोग कर सकते हैं:

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

12
2018-02-06 08:02



का उपयोग करते हुए "drawable", getPackageName() के बजाय null, null कम त्रुटि प्रवण है - cricket_007


ऐसा कुछ काम कर सकता है

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

6
2018-02-06 07:23



यह सभी drawables पाने के लिए मेरे लिए मेल खाता है। मैंने बाद में आसान पहुंच के लिए हैशमैप में सभी को रखा: KEY = f.getInt (f.getName ()) + VALUE = f.getName () - user4500


public static Drawable getImage(Context context, String name) {
        return context.getResources().getDrawable(context.getResources().getIdentifier(name, "drawable", context.getPackageName()));
}

2
2017-12-24 10:47





गतिशील रूप से आकर्षित करने के लिए निम्न पंक्ति का उपयोग करें:

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

यह आपको वांछित ड्राइटेबल देगा।


2
2018-02-06 07:21



यहां आपका DrawableID क्या है - Goofy
yourDrawableID वास्तविक है ID वह मान जिसे आपने अपने लेआउट (xml) फ़ाइल में तत्व के लिए निर्दिष्ट किया है। - astuter


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()));
    }
}

1
2017-09-22 11:05





हम Imageview setImageResource का लाभ उठा सकते हैं क्योंकि यह ड्रायबल लगता है उससे प्रभावी होगा, इसके लिए कोड नीचे देखें।

यदि आपके पास gif की एकाधिक विभाजित छवि है तो gif incase जैसी छवि को दिखाने के लिए नीचे दिए गए कोड का उपयोग किया जा सकता है। बस ऑनलाइन उपकरण से gif को अलग-अलग पीएनजी में विभाजित करें और चित्र को नीचे दिए गए क्रम की तरह खींचें

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
2018-02-01 07:25





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
2018-03-09 01:43



यहां मैंने चित्रकारी फ़ोल्डर में छवियों के लिए सरणी डाइस बनाए हैं। और मैंने रैंडनम (कोड से) नामक यादृच्छिक चर की पीढ़ी द्वारा यादृच्छिक रूप से छवियों का उपयोग किया है। यहां मैं पहले से मौजूद छवि को बदल रहा हूं (आईडी कोड से imageView2 है) प्रत्येक यादृच्छिक संख्या के लिए। जब ​​भी हम एक बटम छवियों को टैप करेंगे यादृच्छिक रूप से जेनरेट किया जाएगा - Anwar shanib