自定義View學習之12 2

2021-06-28 16:41:02 字數 2267 閱讀 1621

好了。策略已想好,下面開始貼**。

private bitmap fgbitmap, frontbitmap;// 前景橡皮擦的bitmap和背景我們底圖的bitmap

private canvas mcanvas;// 繪製橡皮擦路徑的畫布

private paint mpaint;// 橡皮檫路徑畫筆

private path mpath;// 橡皮擦繪製路徑

private

float x, y;

public

customview(context context, attributeset attrs, int defstyleattr)

public

customview(context context, attributeset attrs)

public

customview(context context)

private

void

init()

/** 獲取傳入顏色,高階,寬度的bitmap*/

public bitmap createbitmap(int color, int width, int height)

return bitmap.createbitmap(rgb, width, height, config.argb_8888);

}@override

protected

void

ondraw(canvas canvas)

// 繪製前景

canvas.drawbitmap(fgbitmap, 0, 0, null);

/** 這裡要注意canvas和mcanvas是兩個不同的畫布物件

* 當我們在螢幕上移動手指繪製路徑時會把路徑通過mcanvas繪製到fgbitmap上

* 每當我們手指移動一次均會將路徑mpath作為目標影象繪製到mcanvas上,而在上面我們先在mcanvas上繪製了中性灰色

* 兩者會因為dst_in模式的計算只顯示中性灰,但是因為mpath的透明,計算生成的混合影象也會是透明的

* 所以我們會得到「橡皮擦」的效果

*/mcanvas.drawpath(mpath, mpaint);

super.ondraw(canvas);

}@suppresslint("clickableviewaccessibility")

@override

public

boolean

ontouchevent(motionevent event) else

if (event.getaction() == motionevent.action_move)

return

super.ontouchevent(event);

}

xml布局如下:

imageview要跟自定義放一起哦,不然刮出來就沒內容了。

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:layout_width="400dp"

android:layout_height="400dp"

android:layout_centerinparent="true"

android:src="@drawable/bb" />

android:id="@+id/customview_b"

android:layout_width="400dp"

android:layout_height="400dp"

android:layout_centerinparent="true" />

relativelayout>

效果圖如下:

這是塗刮層。嘿嘿趕緊動手刮刮吧,看看能刮出什麼來。。。

我刮我刮我刮刮刮刮刮……………………..

刮出了個美女…..好白好嫩……..是我女朋友多好。。。。。

咳。。。。。。。好吧,我承認我想多了。。

未完待續。

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...

自定義View之Switch

思路 定義類繼承view,重寫幾個用到的方法 1.三個構造方法 2.onmeasure測量 onlayout布局 ondrow繪圖 3.ontouchevent觸控事件方法 invalidate 可以高頻度的呼叫ondraw 定義乙個外部介面,將開關狀態傳出去 新增設定介面物件的方法,外部進行呼叫 ...