这是我用来将精灵(Bitmap变量)剪切成几帧的代码:
public void drawFrame(Canvas canvas, int frameIndex, int x, int y){
int nbFramePerRow = data.getWidth() / frameWidth;
int sourceFrameY = frameIndex / nbFramePerRow;
int sourceFrameX = frameIndex - (sourceFrameY * nbFramePerRow);
sourceFrameX *= frameWidth;
sourceFrameY *= frameWidth;
int sourceFrameX2 = sourceFrameX + frameWidth;
int sourceFrameY2 = sourceFrameY + frameHeight;
int x2 = x + frameWidth;
int y2 = y + frameHeight;
Rect src = new Rect(sourceFrameX, sourceFrameY, sourceFrameX2, sourceFrameY2);
Rect dst = new Rect(x, y, x2, y2);
canvas.drawBitmap(data, src, dst, paint);
}
当我将图像放入drawable时,两者(原始图像和切割图像)都是未缩放的。 当我把它放在no-dpi fodler中时,它们都被缩放(这很奇怪,应该是相反的......)。
问题:看起来非缩放和缩放剪切图像的像素不同,但框架本身的大小本身保持不变。 这导致在未缩放时只看到我想要显示的部分内容。 我想像原始图片一样显示未缩放的剪切图像。
答案 0 :(得分:1)
在:
drawable-nodpi
图像没有缩放。如果将它们放置在任何其他文件夹中,它们就会被视为是针对给定的密度制作的,并且会缩放以适应其他密度。
请注意,如果您使用Android Studio并使用ANdroid视图,则所有drawable将显示为drawable并且看起来像
|
|- Drawable
|-- someimage.png (mdpi)
|-- someimageother.png(idpi)
|-- somethirdimage.png
如果它在另一个可绘制文件夹中后显示给定文件夹。
那么您是否检查过以确保它实际位于drawable
而不是其他文件夹中?切换到project
视图进行检查,或检查可绘制的名称。您也可以在文件浏览器中打开它,无论您使用何种操作系统,都可以查看
如果通过缩放表示图像随密度变小或变大,则在尺寸相同时可以预期。假设你有256x256的图像,它在较低的密度下看起来更大,在更高的密度下看起来更小
答案 1 :(得分:0)
It's ok for the bitmap to be scaled. It's done to avoid memory leaks on devices with small RAM when loading many of huge pictures. You just need to feagure what the dencity of the screen is by using
Resources#getDisplayMetrics()#density
The values are:
0.75 - ldpi
1.0 - mdpi
1.5 - hdpi
2.0 - xhdpi
3.0 - xxhdpi
4.0 - xxxhdpi
Then you just need to apply the scaling to your animation frames size calculation