由于缩放,Android Drawable看起来很丑陋

时间:2011-04-02 17:37:49

标签: android image size drawable dpi

我正在编写一个View,它应该显示一个似乎“永远不会结束”的drawable。 它应该是显示的两倍或三分之一,并在显示屏上移动缓慢。

因此,我研究了谷歌的一些样本代码并找到了重要的行

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。应该在80dip高度和“fill_parent”宽度的视图中绘制。

它应该在所有设备上看起来都相同(并且很好)。我已经尝试了很多,但我不知道如何让图片看起来很漂亮。

感谢您的帮助。 最好的祝福, 直到

2 个答案:

答案 0 :(得分:0)

既然你说这是一个永无止境的抽象,可能你正在编写某种类型的游戏。如果您的图片是pixel-art type,那么您不需要任何缩放;像素艺术类型的图像无法缩放并保持其清晰的外观(您可以尝试使用nearest neighbor interpolation并缩放到原始的整数倍,这有时可能会起作用,但有时您仍需要手动调整)。这是一种罕见的情况,您实际上需要为不同的屏幕分辨率使用不同的图像资源。

否则你可能想要使用vector image,但如果 - 如你所说 - 原始图像是高分辨率图像,那么矢量图像可能在这里没什么用。

不过,你可能想要展示一些截图。 “看起来很难看”和说我的代码不起作用一样有用。

答案 1 :(得分:0)

只是一个猜测,但不是将null绘制传递给drawBitmap()调用,而是尝试使用禁用位图过滤的绘制:

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

希望有所帮助。