我正在制作带有几个位图的动态壁纸。位图将连续旋转。这就是我旋转一个位图的方式:
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
planet_1 = BitmapFactory.decodeResource(getResources(),
R.drawable.planet_1);
}
void draw(){
Matrix m_planet1 = new Matrix();
m_planet1.setRotate(r_planet1++,
planet_1.getWidth() / 2,
planet_1.getHeight() / 2);
m_planet1.postTranslate(
c.getWidth() / 2 - planet_1.getWidth() / 2,
c.getHeight() - planet_1.getHeight());
c.drawBitmap(planet_1, m_planet1, p1);
r_planet1 = r_planet1++;}
这适用于一个位图,但我希望以不同的速度旋转10个以上的位图。当我为10位图执行此操作时,它开始滞后。有没有什么办法解决这一问题?
答案 0 :(得分:0)
您可以使用硬件加速的SurfaceView,如下所示:
在清单中,将其添加到您的应用程序部分:
android:hardwareAccelerated="true"
在onCreate中,执行以下操作:
setWillNotDraw(false); // Turns on drawing for SurfaceView, disabled by default
然后,在onDraw:
protected void onDraw(Canvas c) {
...do you drawing...
invalidate(); // Triggers redraw
}
此外,不是旋转每个行星,而是尝试移动画布,这通常更简单,也可能更快。
c.save();
c.translate(centerOfPlanetX, centerOfPlanetY);
c.rotate(numDegrees);
c.drawBitmap(.....);
c.restore();