Android Drawable выглядит некрасиво из-за масштабирования - PullRequest
0 голосов
/ 02 апреля 2011

Я пишу представление, которое должно показывать рисование, которое, кажется, никогда не заканчивается.Размер дисплея должен быть в два или три раза меньше и медленно перемещаться по экрану.

Поэтому я изучил некоторые примеры кода Google и обнаружил важные строки

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    canvasWidth = width;
    canvasHeight = height;
    float sf = backgroundImage.getWidth() / canvasWidth;
    backgroundImage = Bitmap.createScaledBitmap(backgroundImage,
        (int) (canvasWidth * sf), canvasHeight, true);
    }

Чтобы изменить масштаб изображения и затем

        // decrement the far background
        backgroundXPos = backgroundXPos - DELTAMOVE;
        // calculate the wrap factor for matching image draw
        int newFarX = backgroundImage.getWidth() - (-backgroundXPos);
        // if we have scrolled all the way, reset to start
        if (newFarX <= 0) {
            backgroundXPos = 0;
            // only need one draw
            canvas.drawBitmap(backgroundImage, backgroundXPos, 0, null);

        } else {
            // need to draw original and wrap
            canvas.drawBitmap(backgroundImage, backgroundXPos, 0, null);
            canvas.drawBitmap(backgroundImage, newFarX, 0, null);
        }

Чтобы нарисовать движущееся изображение.Изображения уже движутся, это нормально.

Но, и это вопрос моего вопроса, изображение выглядит очень некрасиво.Его оригинал 960 * 190 пикселей на 240ppi.Он должен быть нарисован внутри вида с высотой 80 dip и шириной "fill_parent".

Он должен выглядеть одинаково (и хорошо) на всех устройствах.Я много пробовал, но не знаю, как сделать изображение красивым.

Спасибо за вашу помощь.С уважением, До

Ответы [ 2 ]

0 голосов
/ 02 апреля 2011

Просто предположение, но вместо того, чтобы передавать нулевую краску в вызовы drawBitmap (), попробуйте сделать краску с отключенной фильтрацией растровых изображений:

Paint p = new Paint();
p.setFilterBitmap(false);
canvas.drawBitmap(backgroundImage, backgroundXPos, 0, p);

Надеюсь, это поможет.

0 голосов
/ 02 апреля 2011

Поскольку вы говорите, что это бесконечный отрисовочный материал, возможно, вы пишете какую-то игру. Если ваше изображение имеет тип , то вам не нужно масштабирование; Изображения в стиле пиксель-арт не могут быть масштабированы и сохраняют свой четкий вид (вы можете попробовать использовать интерполяция ближайшего соседа и масштабировать до целого числа, кратного оригиналу, что иногда может работать, но иногда вам все равно потребуется ручное управление щипки). Это тот редкий случай, когда вам действительно понадобится другой ресурс изображения для разных разрешений экрана.

В противном случае вы можете использовать векторное изображение , но если - как вы сказали - ваш оригинал - это изображение с высоким разрешением, тогда векторное изображение, вероятно, здесь мало поможет.

Кстати, вы, вероятно, хотите показать скриншот. «Выглядит уродливо» так же полезно, как сказать, что мой код не работает.

...