我有一個自定義視圖,其中包含多個圖層圖層,包含文本,圖形等的佈局。 我想使視圖的一個角部變成圓形(右上角)。 換句話說,我想裁剪這個角落使其圓整 - 而不是設置圓角背景。在Android中使用圓角的自定義視圖
我設法通過使用clipPath()
,但它運行緩慢,因爲我不得不爲此視圖開啓硬件加速 - 所以這個解決方案不適合我。
還有其他的方法嗎?
我有一個自定義視圖,其中包含多個圖層圖層,包含文本,圖形等的佈局。 我想使視圖的一個角部變成圓形(右上角)。 換句話說,我想裁剪這個角落使其圓整 - 而不是設置圓角背景。在Android中使用圓角的自定義視圖
我設法通過使用clipPath()
,但它運行緩慢,因爲我不得不爲此視圖開啓硬件加速 - 所以這個解決方案不適合我。
還有其他的方法嗎?
如果您爲該自定義視圖創建透明畫布,這應該不成問題。然後在其餘的圖形之前在其上繪製一個圓角矩形作爲背景。
圓角矩形應該大於畫布並向左移動,以便畫布的右上角保持透明。
不過是你畫比格爾在您的自定義視圖圖像,並希望只是剪輯的角落比你可以擦除角落充滿油漆拐角形狀路徑
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
我試過像這樣:\t @Override \t public void draw(Canvas canvas){ \t \t \t super.draw(canvas); \t \t最終Paint paint = new Paint(); \t \t Path p = new Path(); (新的RectF(0,canvas.getHeight()/ 2,canvas.getWidth()/ 2,canvas.getHeight()),90,-90); \t \t paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); \t \t canvas.drawPath(p,paint); } - does not; t似乎工作,只是在我的視圖上繪製黑色弧線 – 2013-02-21 22:01:19
這似乎更復雜。當您直接在畫布上繪製它時,會在黑色的默認活動背景上鑽一個洞。我無法找到允許直接清除畫布的自定義視圖的示例。解決這個問題的一個方法是創建一個位圖並在其上繪製所有內容,然後使用Mode.Clear清除拐角。然後在畫布上繪製該位圖。每當你使畫布失效時,它將被清除並變得透明,這樣你就可以再次繪製你的位圖。位圖必須是RGBA_8888。 – Lumis 2013-02-21 23:24:20
這聽起來非常昂貴(性能明智),我在列表行上做.. – 2013-02-22 09:15:11
您是否嘗試過使用XML可繪製?這可能適合你的目的。您可以使用圖層列表來拉出許多有趣的圖形。 – 2013-02-21 16:59:45
我試過了,但AFAIK它只適用於背景的圓角,而不是整個視圖。 – 2013-02-21 17:11:02