Android 当缩放到高分辨率时,绘制位图速度较慢
我有一个非常简单的任务要做,就是在自定义视图中绘制背景图像。我创建了一个位图并缩放它以适应视图的宽度和高度。这使得应用程序的速度慢了一半(我每10毫秒打印一次时间值来衡量性能的速度)。 代码如下:Android 当缩放到高分辨率时,绘制位图速度较慢,android,performance,bitmap,drawing,scale,Android,Performance,Bitmap,Drawing,Scale,我有一个非常简单的任务要做,就是在自定义视图中绘制背景图像。我创建了一个位图并缩放它以适应视图的宽度和高度。这使得应用程序的速度慢了一半(我每10毫秒打印一次时间值来衡量性能的速度)。 代码如下: public class GView extends View { int w, h; Bitmap bg; int time = 0; boolean created = false; public GView(Context context) { super(context);
public class GView extends View {
int w, h;
Bitmap bg;
int time = 0;
boolean created = false;
public GView(Context context) {
super(context);
bg = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
new Timer();
}
@Override
public void onDraw(Canvas c) {
Paint p = new Paint();
if(!created) {
w=getWidth();
h=getHeight();
p.setColor(Color.RED);
p.setTextSize(40);
bg = Bitmap.createScaledBitmap(bg, w, h, false);
created = true;
}
if(created) {
time++;
c.drawBitmap(bg, 0,0,null);
c.drawText(time+"", (int)(w/4), (int)(h/4), p);
}
}
class Timer extends Handler {
private Timer() {
handleMessage(obtainMessage(0));
}
@Override
public void handleMessage(Message m) {
invalidate();
sendMessageDelayed(obtainMessage(0), 10);
}
}
}
仅供参考,原始图像为300x225。我缩放图像的平板电脑屏幕分辨率为1280x800。
问题是,如果我将背景图像缩放为(int)(.8*w),(int)(.8*h)或更小的值,或者根本不缩放图像,那么它会像预期的那样快速运行
我尝试使用ImageView和setImageResource(R.drawable.my_image),但速度还是一样慢。
我认为对于任何编程语言来说,绘制一幅适合背景的图像都应该非常简单,但即使在进行了大量搜索之后,我也有过很长时间的这个问题。我希望有人能给我一个正确的答案。非常感谢。不应在onDraw()例程中执行createScaledBitmap()。它非常慢,因为它使用像素平均例程来“平滑”拉伸的位图。在gui线程之外创建拉伸位图,然后在onDraw()方法中绘制它(canvas.drawBitmap)。如果设置为false,则可以使用过滤器参数创建“最近邻”缩放。这看起来“块状”,但处理速度要快得多
public static Bitmap createScaledBitmap
(Bitmap src, int dstWidth, int dstHeight, boolean filter)
我在onDraw()中调用createScaledBitmap(),因为那时我可以获得视图的宽度和高度。我只使用if(!created)然后call调用它一次,然后设置为created=true,然后再也不调用createScaledBitmap()。所以这并不坏。但是,我仍然尝试在构造函数中调用它,但没有区别。