我正在编写一个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”宽度的视图中绘制。
它应该在所有设备上看起来都相同(并且很好)。我已经尝试了很多,但我不知道如何让图片看起来很漂亮。
感谢您的帮助。 最好的祝福, 直到
答案 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);
希望有所帮助。