1

Android開発の新機能である私のアプリは、カラーピッカーから複数の色を選択してキャンバス(ビットマップを持つ)にパスを描画することです。以前に描画されたパスの色が、キャンバス上の新しいパスの色で更新されています。助けてください、これは私のコードです........

@Override
public void run() {
    // TODO Auto-generated method stub
    while (locker) {
        canvas = null;
        try {
            if (!holder.getSurface().isValid()) {
                continue;
            }
            canvas = holder.lockCanvas();

            draw(canvas);

        } finally {
            if (canvas != null) {
                holder.unlockCanvasAndPost(canvas);
            }
        }
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // synchronized (thread.getSurfaceHolder()) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        path = new Path();
        path.moveTo(event.getX(), event.getY());
        path.lineTo(event.getX(), event.getY());
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        path.lineTo(event.getX(), event.getY());
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        path.lineTo(event.getX(), event.getY());
        paths.add(path);
    }
    return true;
    // }
}

/**
 * This method deals with paint-works. Also will paint something in
 * background
 */
private void draw(Canvas canvas) {
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.bell);
    // canvas.drawColor(Color.CYAN);
    canvas.drawBitmap(bitmap, 20, 20, mPaint);
    // canvas.drawPath(mPath, mPaint);
    for (Path path : paths) {
        // canvas.drawPoint(graphic.x, graphic.y, mPaint);
        canvas.drawPath(path, mPaint);
    }
}

}

4

1 に答える 1

0

パスごとに、それが描かれた色を覚えておく必要があります。たとえば、パス リストと同時に塗りつぶす色 (整数) のリストを作成できます。次に、 draw メソッドでこれを行います:

private void draw(Canvas canvas) {
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
            R.drawable.bell);
    canvas.drawBitmap(bitmap, 20, 20, mPaint);

    int count = path.size();
    for (int i = 0; i < count; i++) {
        mPaint.setColor(colors.get(i));
        canvas.drawPath(paths.get(i), mPaint);
    }
}
于 2013-01-16T10:38:13.540 に答える