изменение размера изображения для соответствия разным размерам экрана - PullRequest
3 голосов
/ 20 марта 2012

У меня есть приложение, которое масштабирует мои изображения для нескольких размеров экрана на телефонах Android.

Макет создается программно (без XML), я просто определяю размер изображения, когда сохраняю его в своем фоторедакторе, например 60x60.

Похоже, что на планшете он максимально увеличен, но может быть больше. Я попытался изменить размер изображения на 100x100, это немного заполняет экран планшета, но теперь оно не уменьшает это изображение на небольших устройствах ... очень разочарован.

Вот мой код:

Android Manifest: enabling resizable attribute and supported screens

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.anndconsulting.numbertouch"
      android:versionCode="1"
      android:versionName="1.0"
      android:installLocation="auto"  
      android:resizeable="true"
      >  
   <supports-screens
      android:smallScreens="true"
      android:normalScreens="true"
      android:largeScreens="true"
      android:anyDensity="true"
      />

Game.Java код:

    //create a layout
    ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.VERTICAL);
    ll.setBackgroundResource(R.drawable.background);
    ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
               LayoutParams.FILL_PARENT));

  //create another 5 linear layouts which will host 5 buttons horizontally
     linearLayout1 = new LinearLayout(this);
     linearLayout1.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout1.setGravity(Gravity.CENTER);

     linearLayout2 = new LinearLayout(this);
     linearLayout2.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout2.setGravity(Gravity.CENTER);

     linearLayout3 = new LinearLayout(this);
     linearLayout3.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout3.setGravity(Gravity.CENTER);

     linearLayout4 = new LinearLayout(this);
     linearLayout4.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout4.setGravity(Gravity.CENTER);

     linearLayout5 = new LinearLayout(this);
     linearLayout5.setOrientation(LinearLayout.HORIZONTAL);
     linearLayout5.setGravity(Gravity.CENTER);

    Then i create a 5x5 array of buttons (which I saved as 100x100) in the drawable      folder

    for (int i = 0; i < 25; i++) {
            buttonsa.add(createButton(i));
        }
        Collections.shuffle(buttonsa);

        //add first 5 buttons to first layout
            for (int i=0;i<5;i++) {
            linearLayout1.addView(buttonsa.get(i));


        }
      //add remaining 5 to second layout
        for (int i=5;i<10;i++){
            linearLayout2.addView(buttonsa.get(i));

        }
        for (int i=10;i<15;i++){
            linearLayout3.addView(buttonsa.get(i));

        }
        for (int i=15;i<20;i++){
            linearLayout4.addView(buttonsa.get(i));

        }
        for (int i=20;i<25;i++){
            linearLayout5.addView(buttonsa.get(i));

        }
    ll.addView(linearLayout1);
        ll.addView(linearLayout2);
        ll.addView(linearLayout3);
        ll.addView(linearLayout4);
        ll.addView(linearLayout5);

my create button function below:

private Button createButton(final int i) {
final Button b = new Button(this);
int mode = mGameSettings.getInt(GAME_PREFERENCES_GAME_MODE, 0);
if (mode == 1) {

    b.setText(" "+letter[i]);
    b.setWidth(20); <-- this is where I thought I could change but does not 
    b.setHeight(20); <-- same here, just fills the small screen with big image 
                             and cuts of the rest.
    }
    else {
    b.setText((i+1) +" "); }

1 Ответ

0 голосов
/ 01 сентября 2013

Лучший способ поддерживать изображение на нескольких устройствах с различными размерами и плотностью экрана - поместить изображение размером 60 * 60 в папку для рисования и изображение размером 100 * 100 в папку drawable-large-hdpi или drawable-large-mdpiили из какой-либо папки, из которой ваше устройство возьмет откат.Таким образом, когда вы запускаете приложение в телефоне нормального размера или на любых устройствах с большим экраном.изображения будут взяты из соответствующих папок для рисования и масштабированы в соответствии с плотностью устройства.

...