思路:
定義類繼承view,重寫幾個用到的方法
1.三個構造方法
2. onmeasure測量
onlayout布局
ondrow繪圖
3.ontouchevent觸控事件方法
invalidate();可以高頻度的呼叫ondraw()
定義乙個外部介面,將開關狀態傳出去
新增設定介面物件的方法,外部進行呼叫
import android.content.context;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.graphics.canvas;
import android.graphics.paint;
import android.util.attributeset;
import android.view.motionevent;
import android.view.view;
/** * created by maker_huige on 2016/12/26.
*/public
class
toggleview
extends
view
public
toggleview(context context, attributeset attrs)
public
toggleview(context context, attributeset attrs, int defstyleattr)
private
void
init(attributeset attrs)
/*** 自定義元件的三個方法,執行onresum後執行
* onmeasure測量
* onlayout布局
* ondrow繪圖
* view需要兩個
* viewgrowp需要三個
*/@override
protected
void
onmeasure(int widthmeasurespec, int heightmeasurespec)
@override
protected
void
ondraw(canvas canvas) else
canvas.drawbitmap(bitmap_slide_button,newleft,0,paint);
}else else}}
@override
public
boolean
ontouchevent(motionevent event)
mswitchstate = state;
break;
}invalidate();
return
true;
}// 宣告介面物件
public
inte***ce
onswitchstateupdatelistener
// 新增設定介面物件的方法,外部進行呼叫
public
void
setonswitchstateupdatelistener(onswitchstateupdatelistener onswitchstateupdatelistener)
public
void
setswitchbackgroundresource(int switch_background)
public
void
setslidebuttonresource(int slide_button)
}
在activity中設定事件***,通過匿名內部類的方式並將state狀態列印出來
public
class
toggleactivity
extends
activity
});}
private
void
initui()
}
xml
<?xml version="1.0" encoding="utf-8"?>
xmlns:itheima=""
xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent">
itheima:switch_background="@mipmap/switch_background"
itheima:slide_button="@mipmap/slide_button"
itheima:switch_state="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerinparent="true"
android:id="@+id/toggleview"
/>
relativelayout>
自定義屬性的xml
<?xml version="1.0" encoding="utf-8"?>
name="toggleview">
name="switch_background"
format="reference"/>
name="slide_button"
format="reference"/>
name="switch_state"
format="boolean"/>
declare-styleable>
resources>
自定義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...
iOS 之自定義view
自定義view的兩種方式 第一種 純手寫 建立 instancetype initwithframe cgrect frame return self 在這裡設定控制項的frame 在改方法中一定要呼叫 super layoutsubviews 方法 主要是設定空間的frame值 加約束 void ...