私はこの問題を探り、さまざまな解決策を提案しました。
しかし、私のために働いたものはありません。キャンバス消しゴムは黒い線を描いています
私はアプリに描画キャンバスを持っています。
キャンバスの背景は、カスタムビュー(drawView)を使用するアクティビティのpng Imageに設定されています。 DrawingViewクラスの
Bundle extras = intent.getExtras();
if (extras != null) {
if (extras.containsKey("background")) {
//set the background to the resource in the extras
int imageResource = intent.getIntExtra("background",-1);
Drawable image = getResources().getDrawable(imageResource);
drawView.setBackground(image);
}
}
(それは消しゴムした場合の塗料を使用、パスと)(drawviewインスタンスである)、Iは3つの特性を有するPathPaintsのコレクションに描画パスを格納します。
private ArrayList<PathPaint> paths = new ArrayList<PathPaint>();
それからOnDrawにこれらのパスを介してループにしようと彼らが(みとめ色)で描画した塗料とするたびに再描画します。
protected void onDraw(Canvas canvas) {
//if the drawing is new - dont draw any paths
if (isNew != true) {
//go through every previous path and draw them
for (PathPaint p : paths) {
if (!p.isErase)
{
canvas.drawPath(p.myPath, p.myPaint);
}
else
{
//Paint eraserPaint = setDefaultPaint();
//eraserPaint.setAlpha(0xFF);
//eraserPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
//eraserPaint.setColor(Color.TRANSPARENT);
//canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
canvas.drawPath(p.myPath, p.myPaint);
}
canvas.drawBitmap(canvasBitmap, 0, 0, null);
}
}
私は多くの提案されたオプションをオンラインで試したが、役に立たない。
私は様々なコメントアウトされたすべてのプロパティを設定するためにdrawpathのペイントを設定しようとしました。
Iがビットマップに描画した後、キャンバスにそのビットマップをロードする(canvas.drawBitmap(canvasBitmap、0、0、NULL))
を試みた私は
このクラスのコンストラクタでハードウェアアクセラレーションをオフになっていますsetLayerType(View.LAYER_TYPE_SOFTWARE, null);
ただし、行が描画されていないか、コレクションがパスを再描画しているときに消しゴムが黒い線を描画します。面白いです何
私はループ面なしでビットマップを使用して消去を行う場合ということです - 予想通り消しゴムで動作します。
//If we are making a new drawing we don't want to go through all the paths
if (isNew != true && erase ==false) {
//go through every previous path and draw them
for (PathPaint p : paths) {
if (!p.isErase)
{
canvas.drawPath(p.myPath, p.myPaint);
}
//this section now takes place in the elseIF
else
{
Paint eraserPaint = setDefaultPaint();
eraserPaint.setAlpha(0xFF);
eraserPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
eraserPaint.setColor(Color.TRANSPARENT);
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
canvas.drawPath(p.myPath, p.myPaint);
}
}
}
else if (isNew != true && erase ==true)
{
//This works correctly for Erasing but I dont have the ability to Undo/Redo with this approach!
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
canvas.drawPath(drawPath, drawPaint);
}
これは、しかし、私は(収集のためのポイントを)消去やり直し/元に戻すことができるようにしたいので、問題である
誰も私を助けてくださいことはできますか?
drawView.setBackground(image);この行に** drawView **とは何ですか? –