我正在嘗試使用canvas.clipPath()在約束圈內繪製位圖圖像,類似於APP演示中的剪切活動。問題是我的代碼只能在模擬器上正確呈現,當在實際的Samsung Galaxy Nexus 4.2上運行時,它看起來好像clipPath更像矩形剪輯。我完全難倒了!我創建了一個新的Path()並在我的視圖ctor中解碼位圖。有什麼建議麼?Canvas clipPath僅適用於Android模擬器
@Override
protected void onDraw(Canvas canvas) {
Point point = getPoint();
path.reset();
canvas.clipPath(path); // makes the clip empty
path.addCircle(point.x, point.y, getScale() * 140, Path.Direction.CCW);
canvas.clipPath(path, Region.Op.REPLACE);
Point scaledSize = new Point((int) (bitmapSize.x * getScale()), (int) (bitmapSize.y * getScale()));
Point topLeft = new Point((point.x - (scaledSize.x/2)), (point.y - (scaledSize.y/2)));
canvas.drawBitmap(bitmap, null, new Rect(topLeft.x, topLeft.y, topLeft.x + scaledSize.x, topLeft.y + scaledSize.y), paint);
}
Galaxy Nexus的
模擬器
完美!這就像一個魅力!現在如果我想動畫剪輯,減少/增加我的圈子的大小?我是否需要爲每個剪輯創建新的位圖,或者是否可以重新使用位圖並關聯畫布,每次都從原始源重新繪製? – Cliff
您可以使用一個位圖,繪製一個更小或更大的內圓,然後將源位圖中的遮罩區域複製到新位圖中。根據動畫階段,裁剪的位圖將具有更小或更大的透明區域。 – yoah