5

onDraw関数でgetDrawingCacheを呼び出しています。問題は、キャンバスへの変更が最初にのみ含まれ、その後は新しい変更でまったく更新されないことです。これが私のコードです:

        paintAction.draw(canvas);
        if (paintAction.isPermanentChange())
        {
            Bitmap partialBitmap=getDrawingCache();
            int numColored=0;
            for (int index1=0;index1<partialBitmap.getWidth();index1++)
            {
                for (int index2=0;index2<partialBitmap.getHeight();index2++)
                {
                    if (partialBitmap.getPixel(index1,index2)==0xFF000000) 
                        numColored++;
                }
            }
            Log.i("PaintDroid","Bitmap pixels: " + numColored);
            int areaWidth=partialBitmap.getWidth()-SCROLLBAR_SIZE;
            int areaHeight=partialBitmap.getHeight()-SCROLLBAR_SIZE;
            int[] pixels=new int[areaWidth*areaHeight];
            partialBitmap.getPixels(pixels,0,areaWidth,0,0,areaWidth,
                    areaHeight);    
            numColored=0;
            for (int index=0;index<pixels.length;index++)
                if (pixels[index]==0xFF000000) numColored++;
            Log.i("PaintDroid","Pixels: " + numColored);

(ビューの作成時にsetDrawingCache(true)が呼び出されます。これは、onDrawから呼び出すと、getDrawingCacheがnullを返すためです。)

ご覧のとおり、ビットマップをトラバースして配列の値を取得することで、黒いピクセルの数を数えています。前述したように、最初に期待した数を取得しましたが、その後は増えるはずだったのに、まったく変わらない!

誰かが何が悪いのか考えていますか?ありがとう。

4

2 に答える 2

5

私はそれを解決しました。問題は、onDrawのキャンバスでの最後の描画操作の前にsetDrawingCacheEnabled(true)を呼び出したことでした。描画が終了した後に呼び出す必要があります。そうしないと、正しい結果が得られません。

于 2012-06-16T10:41:55.920 に答える
0

明確にするために、ここでの問題は、2回目の呼び出しの前にビューの描画キャッシュが無効にされなかったことですgetDrawingCache()

図面キャッシュを更新するには、それを無効にする必要があり、メソッドの呼び出し順序は次のとおりです。

public Bitmap renderView(View view) {
    view.setDrawingCacheEnabled(true)
    Bitmap bitmap = view.getDrawingCache();
    view.setDrawingCacheEnabled(false)
    return bitmap;
}
于 2014-08-21T08:20:35.747 に答える