小编pet*_*lli的帖子

带有SurfaceHolder.lockCanvas的LiveWallpaper(Rect脏)

我想问一下这里已经解决过一两次的问题,但我发现的任何信息都无法帮助我克服几天前遇到的问题.

我想使用画布为Android制作一个动态壁纸 - 它的图形复杂程度不足以要求OpenGL.为简单起见,假设它由实心背景和两个较小的矩形组成.绘图由三个独立的阶段组成(单线程):

  1. backgroundDraw()请求整个画布锁并在其上绘制纯色
  2. draw1()请求部分(Rect r1)锁定并仅在锁定的矩形上绘制
  3. draw2()请求部分(Rect r2)锁定并仅在锁定的矩形上绘制

我在多个Android版本(模拟器和设备)上测试了它:2.1,2.2,2.3.3.它似乎只适用于后者(这里:http://home.elka.pw.edu.pl/~pgawron/include/Android/android_233.jpg).在以前的Android版本中,SurfaceHolder.lockCanvas(Rect dirty)调整大小(!)脏参数作为参数传递到全屏大小,并使用它进一步绘制结果在整个屏幕上绘图(这里:http://home.elka.pw.edu .pl/~pgawron/include/Android/android_22.jpg).事实上,我可以看到每个矩形是如何被绘制的(全屏):整个屏幕很快就会改变它的颜色.

不幸的是谷歌找不到任何关于lockCanvas(Rect脏)用法的正确例子.下面我附上我用于测试目的的完整且唯一的类.可以在提供屏幕截图的位置访问完整的eclipse项目.

如果有人能够最终帮助我并更正我的代码(如果我的代码中只有问题),我将非常感激.我真的浪费了太多时间.

BR,

彼得雷利

package sec.polishcode.test;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.SystemClock;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
import android.view.SurfaceHolder;

public class TestLiveWallpaper extends WallpaperService{

@Override
public Engine onCreateEngine() {
    return new MyEngine();
}

class MyEngine extends Engine implements SurfaceHolder.Callback {

    private final String LOGTAG = MyEngine.class.getSimpleName();
    private Paint backgroundPaint = new Paint();
    private Paint mPaint1 = new …
Run Code Online (Sandbox Code Playgroud)

android surfaceholder

5
推荐指数
1
解决办法
3129
查看次数

标签 统计

android ×1

surfaceholder ×1