2013-08-20 4 views
0

Я новичок в java/android и делаю тестовое приложение. У него есть кнопки ImageButtons, которые при щелчке переключаются на другое изображение временно. Оригиналы обрезаются с помощьюКак отрегулировать размер второго изображения из setImageResource()

android:adjustViewBounds="true" 
android:scaleType="centerCrop" 

в activity_main.xml Проблема является вторым разве изображение обрезается, и поэтому слишком большой для кнопки. Кто-нибудь знает, как я могу это исправить? Херес пример одной из кнопок:

public void onClick(View v) { 

     //switch to second img 
butt2.setImageResource(R.drawable.newimg); 

//switch back to first after pause 

new Handler().postDelayed(new Runnable() { 

    public void run() { 

     butt2.setImageResource(R.drawable.orig); 


    } 

}, 500L); 

      }  
    }); 
+0

Возможный дубликат? http://stackoverflow.com/questions/13639773/crop-a-drawable-image-by-android-gallery-cropping-method –

+0

Похоже, что вы должны использовать селектор (т.е. 'StateListDrawable') вместо переключения изображения вручную в событии клика. –

ответ

0

Там еще один способ, чтобы попытаться эту вещь, если вы хотите нравится, когда вы нажимаете на кнопку его фон должен меняться и когда вы отпускаете его, фон переходит к предыдущему.

Это может быть достигнуто следующим образом

Теперь в файле main.xml, что вы хотите, чтобы показать, как деятельность, и где вы объявили кнопку тег, добавить заявление,

Android: фон =» @ вытяжка/customDefaultBackground»

и это будет как

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/customDefaultBackground" /> 

Теперь добавьте файл XML в селекторном типе тега и назвать его как customDefaul tBackground.xml, откройте этот файл и добавьте следующее его содержание: -

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true" android:drawable="@drawable/onPressBackground" ></item> 
<item android:drawable="@drawable/defaultBackground"></item> 
</selector> 

Item тег андроида: state_pressed установлен верно, означает, что, когда пользователь нажимает на кнопку и удерживайте ее нажатой версии backgroundOnPressed будет отображается иначе, когда будет отображаться фон по умолчанию.

+0

вам нужен отдельный XML-файл для каждой кнопки? Если у них разные образы – user718229

+0

Да, у вас должны быть разные xmls для каждого, потому что вы собираетесь устанавливать разные фоны для каждой кнопки. Если вы хотите иметь одинаковый фон для каждой кнопки, вы можете использовать один xml. –

+0

Надеюсь, это сработало для вас хорошо. –

2

Я использовал следующие

int normal[] = { R.drawable.num0, R.drawable.num1, R.drawable.num2, 
      R.drawable.num3, R.drawable.num4, R.drawable.num5, 
      R.drawable.num6, R.drawable.num7, R.drawable.num8, 
      R.drawable.num9, R.drawable.del, R.drawable.go }; 
    int pressed[] = { R.drawable.num0_clicked, R.drawable.num1_clicked, 
      R.drawable.num2_clicked, R.drawable.num3_clicked, 
      R.drawable.num4_clicked, R.drawable.num5_clicked, 
      R.drawable.num6_clicked, R.drawable.num7_clicked, 
      R.drawable.num8_clicked, R.drawable.num9_clicked, 
      R.drawable.del_clicked, R.drawable.go_clicked }; 
        StateListDrawable sld; 
        for (int i = 0; i < 12; i++) { 
      sld = new StateListDrawable(); 
      sld.addState(new int[] { android.R.attr.state_pressed }, 
        getResources().getDrawable(pressed[i])); 
      sld.addState(new int[] {}, getResources().getDrawable(normal[i])); 
      btns[i].setImageDrawable(sld); 
     }