gpt4 book ai didi

android - WallpaperServices 绘制方法的类无效方法

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:45 27 4
gpt4 key购买 nike

我试图使带有加速度计的移动位图更平滑,但无意中注意到,当我在 onDraw() 方法末尾调用 invalidate(); 而不是调用它时在 onSensorChanged() 结束时,即使我没有任何类型的低通滤波器,我的运动也更加顺畅。然后我尝试对我的 LiveWallpaper 做同样的事情,但是正如你所知,WallpaperServiceEngine 中没有 onDraw() 方法,但是你必须自己创建一个并使用 Handler 调用它。但是即使其余代码与其他程序相同,这样做也不会产生任何更平滑的结果。

这是我在我的非墙纸程序中使用的代码,它运行良好:

public void onDraw(Canvas c) {

xPosition += xAcceleration;
yPosition += yAcceleration;

drawable = BitmapFactory.decodeResource(getResources(),R.drawable.ball);
c.drawBitmap(drawable, xPosition,yPosition, paint);

invalidate();

}

所以我去尝试为 WallpaperService 创建我自己的类似无效的解决方案并想出了这个:

void drawFrame() {
final SurfaceHolder holder = getSurfaceHolder();

Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
xPosition += xAcceleration;
yPosition += yAcceleration;

background = BitmapFactory.decodeResource(getResources(),R.drawable.bg);
drawable = BitmapFactory.decodeResource(getResources(),R.drawable.ball);

c.drawBitmap(background, 0,0, null);
c.drawBitmap(drawable, xPosition,yPosition, null);
}
} catch (Exception ex){
}
holder.unlockCanvasAndPost(c);
drawFrame();
}

所以我正在做的是:

  1. 获取 Canvas
  2. Canvas 上绘图。
  3. 解锁 Canvas 并重新开始。

据我所知,这应该给我 invalidate(); 类似的行为,但它会尝试显示墙纸,然后它会给我 StackOverflowError。

最佳答案

好的,我已经解决了这个问题。我所要做的就是将位图初始化移动到 onCreate() 方法中。

关于android - WallpaperServices 绘制方法的类无效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12298075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com