1

I am new to android programming and i am making an application which has animated counter. each time i press count button count will increment and i want to change the ImageView image source according to count

i am doing this with if conditions while i want to do it dynamically because i have 9999 maximum count so i cannot write much if conditions for this

TextView textViewHeader;
static String value;
static int count;
static ImageButton imageButtonCountTasbeeh;
ImageView imageViewLsb,imageViewLsb1, imageViewLsb2, imageViewLsb3;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tasbeeh_counter);
    imageButtonCountTasbeeh = (ImageButton)findViewById(R.id.imageButtonCountTasbeeh);
    textViewHeader = (TextView)findViewById(R.id.editTextTasbeehName);
    imageButtonCountTasbeeh.setImageResource(R.drawable.imagebuttontasbeenpageselector);
    imageViewLsb = (ImageView)findViewById(R.id.imageViewLsb);
    imageViewLsb1 = (ImageView)findViewById(R.id.imageViewLsb1);
    imageViewLsb2 = (ImageView)findViewById(R.id.imageViewLsb2);
    imageViewLsb3 = (ImageView)findViewById(R.id.imageViewLsb3);

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        value = extras.getString("tasbeehName");
    }
    textViewHeader.setText(value);

    imageButtonCountTasbeeh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Toast.makeText(getBaseContext(), "Hello you Just Clicked me", Toast.LENGTH_LONG).show();
            count++;
            if(count<10) {
                int resID = getResources().getIdentifier("n" + count, "drawable", getPackageName());
                imageViewLsb.setImageResource(resID);
            }else if(count<20 && count>=10)
            {
                int count1 = count-10;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n1);

            }else if(count<30 && count>=20)
            {
                int count1 = count-20;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n2);
            }else if(count<40 && count>=30)
            {
                int count1 = count-30;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n3);
            }else if(count<50 && count>=40)
            {
                int count1 = count-40;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n4);
            }else if(count<60 && count>=50)
            {
                int count1 = count-50;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n5);
            }else if(count<70 && count>=60)
            {
                int count1 = count-60;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n6);
            }else if(count<80 && count>=70)
            {
                int count1 = count-70;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n7);
            }else if(count<90 && count>=80)
            {
                int count1 = count-80;
                int resID = getResources().getIdentifier("n" + count1, "drawable", getPackageName());

                imageViewLsb.setImageResource(resID);
                imageViewLsb1.setImageResource(R.drawable.n8);
            }



        }
    });




}

}

Arslan Ali
  • 33
  • 1
  • 8
  • Possible duplicate of [Android - Open resource from @drawable String](http://stackoverflow.com/questions/2349652/android-open-resource-from-drawable-string) – Jyotman Singh Mar 24 '16 at 21:27

2 Answers2

1

Try this:

imageButtonCountTasbeeh.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Toast.makeText(getBaseContext(), "Hello you Just Clicked me", Toast.LENGTH_LONG).show();
         count++;             
         if (count > 999)
                imageViewLsb3.setImageResource(getResIdDrawableByNumber(count / 1000));

            if (count > 99 ) {
                int n100 = (count % 1000) / 100;
                imageViewLsb2.setImageResource(getResIdDrawableByNumber(n100));
            }

            if (count > 9) {
                int number10 = (count % 100) / 10;
                imageViewLsb1.setImageResource(getResIdDrawableByNumber(number10));
            }

            imageViewLsb.setImageResource(getResIdDrawableByNumber(count % 10));
    }
});

Use this method to get the corresponding image resource id by number value:

public int getResIdDrawableByNumber(int count){    
     return = getResources().getIdentifier("n" + count, "drawable", getPackageName());    
}

Hope this helps!!

Gueorgui Obregon
  • 5,077
  • 3
  • 33
  • 57
0

You can get this done by getting the resource id like this:

int drawableResourceId = this.getResources().getIdentifier("nameOfDrawable", "drawable", this.getPackageName());

Here you have to replace nameOfDrawable by n1, n2, .., n9999.

thus:

@Override
public void onClick(View v) {
     count++;
     int drawableResourceId = this.getResources().getIdentifier("n"+count, "drawable", this.getPackageName());           
     imageViewLsb.setImageResource(drawableResourceId);
}
Rohit Arya
  • 6,751
  • 1
  • 26
  • 40