2013-09-24 3 views
2

Моя проблема простая, однако решение ускользает от меня; Я хочу, чтобы растровые изображения масштабировались относительно размера экрана.Изображения не resalaling пропорциональности в Android

Изображение проблемы:

enter image description here

Ниже приведен код, я не знаю, сколько включать как я действительно не могу понять, почему это происходит.

public TitleView(Context context) { 
    super(context); 

    myContext = context; 
    titleGraphicFixed = BitmapFactory.decodeResource(getResources(), 
      R.drawable.title_background); 
    playButtonUpFixed = BitmapFactory.decodeResource(getResources(), 
      R.drawable.button_play_up); 
    playButtonDownFixed = BitmapFactory.decodeResource(getResources(), 
      R.drawable.button_play_down); 
} 

@Override 
public void onSizeChanged(int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(w, h, oldw, oldh); 
    screenW = w; 
    screenH = h; 

    drawScaleW = (float) screenW/800; 
    drawScaleH = (float) screenH/600; 

    Log.d(TAG, "Screen Width: " + drawScaleW); 
    Log.d(TAG, "Screen Height: " + drawScaleH); 

    titleGraphic = Bitmap.createScaledBitmap(titleGraphicFixed, screenW, 
      screenH, true); 
    playButtonUp = Bitmap.createScaledBitmap(playButtonUpFixed, 
      (int) (playButtonUpFixed.getWidth() * drawScaleW), 
      (int) (playButtonUpFixed.getHeight() * drawScaleH), true); 
    playButtonDown = Bitmap.createScaledBitmap(playButtonDownFixed, 
      (int) (playButtonDownFixed.getWidth() * drawScaleW), 
      (int) (playButtonDownFixed.getHeight() * drawScaleH), true); 

Edit:

Я строю на примере найденного в книге «Android Программирование игр для чайников», как это первое приложение/игры я закодированы для андроида. Для его названий игр/страниц меню автор не использует XML-макеты.

Это ссылка на код я использую в настоящее время:

MainActivity

TitleView

Второе редактирование:

Ниже приведены сведения, полученные из журналов, следующий текст выкладывается так, что слева находится меньший из изображенных устройств выше и справа, чем больше.

экрана Ш: 320, 800 экран H: 240, 480

шкала W: 0,4, 1,0 Шкала H: 0,4, 0,8

(До сих пор все математику добавляет вверх/правильно, однако здесь есть было это сходит с ума

Фактическая кнопка размер изображения кнопки: W220, H67

Рассчитано размер кнопки: W: 66, 330 H: 20, 80

Очевидно, что это не так, как, например, маленький экран, H67 * 0,4 не равно 20. Таким образом, я пошел посмотреть, что ширина и высота кнопки, как только они будут импортированы в и обнаружили:

W: 165, 330 H: 50, 101

Это означает, что для маленького экрана, после создания растрового изображения (но не масштабируется, оно автоматически масштабируется на 0,75 от фактического размера изображения кнопки). Для большего экрана он изменяется на 1,5 в точке, в которой он создается. Я не могу для меня обойтись, почему!

+0

В чем проблема с этим? – andy256

+0

Кнопки должны теоретически быть одинаковыми по размеру (относительно размера экрана), что не так. –

ответ

0

Для меня эта проблема связана с Auto Scale TextView Text to Fit within Bounds, Android Buttons not scaling и Scale text in a view to fit?.

Вы можете найти решения в тех вопросах, которые подходят для вашего случая, но у меня была аналогичная проблема, и я обнаружил, что заменяя объекты Button объектами ImageButton и создавая изображения, которые соответствуют его решению, в моем случае.

Для ваших иконок: 0.05x1: 1.5x: 2x.

+0

Благодарим за ответ и, несмотря на то, что ответ полезен, он не отвечает (напрямую) на вопрос. Решение заменить мои объекты «Button с объектами ImageButton» может работать, однако эта проблема с точки зрения масштабирования существует не только для кнопок, но и для всех изображений в целом. –

+0

Видимо, я неправильно понял проблему. Можете ли вы разместить свой XML-макет? – andy256

+0

Жаль, что это, скорее всего, сам, кто проблема. Я обновил сообщение с дополнительной информацией, если вы не против взглянуть. Благодарю. –

0

Я (думаю) я нашел ответ:

I don't want Android to resize my bitmap Automatically

В основном маленький экран попадает под ldpi в то время как другой экран (на фото) является либо MDPI или ИПЧР. По-видимому, выпадающая папка обрабатывает изображения так же, как и mdpi, поэтому именно она перемасштабирует большой экран и уменьшает масштаб экрана.

Смежные вопросы