Android onMeasure與onDraw及自定義屬性使用示例
1.自定義View簡(jiǎn)介
自定義view可以被認(rèn)為是繼承自View,系統(tǒng)沒(méi)有的效果(ImageView,TextView,Button),extents View,extents ViewGrop
2.構(gòu)造方法
繼承View。View有四個(gè)構(gòu)造方法,下面講述四個(gè)構(gòu)造方法什么時(shí)候調(diào)用:
第一個(gè)構(gòu)造方法會(huì)在代碼中new的時(shí)候調(diào)用
TextView textView = new TextView(this);
public TextView(Context context) {
super(context);
}
第二個(gè)構(gòu)造方法在布局layout中使用(調(diào)用)
<com.zrc.view_java_demo_01.TextView android:layout_width="match_parent" android:layout_height="match_parent"/>
public TextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
第三個(gè)構(gòu)造方法在布局layout中使用(調(diào)用),但是會(huì)有style
調(diào)用 <com.zrc.view_java_demo_01.TextView style="@style/defualt"/>
<style name="defualt" > <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">@color/colorAccent</item> </style>
public TextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
還有第四個(gè)構(gòu)造方法,在用到時(shí)候,再做說(shuō)明,在這里就不再展開(kāi)。
3.onMeasure()
獲取寬高的模式
int widthSize = MeasureSpec.getMode(widthMeasureSpec); //獲取前兩位 int heightSize = MeasureSpec.getMode(heightMeasureSpec);
獲取寬高的值,指定控件的寬高
int widthSize = MeasureSpec.getSize(widthMeasureSpec); //獲取后面30位 int heightSize = MeasureSpec.getSize(heightMeasureSpec);
MeasureSpec.AT_MOST:在布局中指定了wrap_content
MeasureSpec.EXACTLY: 在布局中特定的值 100dp match_parent fill_parent
MeasureSpec.UNSPECIFIED:盡可能的大,很少用到。listview,Scrollview 在測(cè)量子布局時(shí)候會(huì)用UNSPECIFIED
Scrollview+ListView會(huì)出現(xiàn)顯示不全的現(xiàn)象?
widthMeasureSpec widthMeasureSpec : 會(huì)包含兩個(gè)信息是一個(gè)32位的值,第一個(gè)信息是模式:2位 值:30位
4.onDraw()
/**
* 用于繪制
* */
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//畫(huà)文本
canvas.drawText();
//畫(huà)弧
canvas.drawArc();
//畫(huà)圓
canvas.drawCircle();
}
5.onTouch()
/**
* 處理用戶交互的,手指觸摸等等(事件分發(fā)事件攔截)
* */
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
//手指按下
Log.e("TAG","手指按下");
break;
case MotionEvent.ACTION_MOVE:
//手指移動(dòng)
Log.e("TAG","手指移動(dòng)");
break;
case MotionEvent.ACTION_UP:
//手指抬起
Log.e("TAG","手指抬起");
break;
}
return super.onTouchEvent(event);
}
6.自定義屬性
自定義屬性就是用來(lái)配置的,android:text = "Darren"是系統(tǒng)自定義屬性
6.1在res下的values下面新建attrs.xml
<!-- name 屬性名稱
format 格式: string 文字 color:顏色
dimension 寬高 字體大小 integer 數(shù)字
reference 資源(drawable)
-->
<attr name="text" format="string"/>
<attr name="textColor" format="color"/>
<attr name="textSize" format="dimension"/>
<attr name="maxLength" format="integer"/>
<attr name="background" format="reference|color"/>
<!-- 枚舉 -->
<attr name="inputType">
<enum name="number" value="1"/>
<enum name="text" value="2"/>
<enum name="password" value="3"/>
</attr>
</declare-styleable>
6.2在布局中使用
聲明命名空間,然后在自己的自定義View中使用
xmlns:app="http://schemas.android.com/apk/res-auto"
<com.zrc.view_java_demo_01.TextView
app:text="Darren"
app:textColor="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
6.3在自定義View中獲取屬性
// 獲取自定義屬性 TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.TextView); mText = array.getString(R.styleable.TextView_text); mTextColor = array.getColor(R.styleable.TextView_textColor,mTextColor); mTextSize = array.getDimensionPixelSize(R.styleable.TextView_textSize,mTextSize); // 回收 array.recycle();
到此這篇關(guān)于Android onMeasure與onDraw及自定義屬性使用示例的文章就介紹到這了,更多相關(guān)Android onMeasure內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Android更改APP語(yǔ)言模式的實(shí)現(xiàn)過(guò)程
本文詳細(xì)介紹如何更改Android中APP的語(yǔ)言模式,這個(gè)功能對(duì)于大家開(kāi)發(fā)Android APP很有幫助,本文運(yùn)用文字介紹和代碼示例把過(guò)程寫的很詳細(xì),有需要的可以參考借鑒。2016-08-08
Android實(shí)現(xiàn)滑動(dòng)刪除操作(PopupWindow)
這篇文章主要介紹了Android ListView結(jié)合PopupWindow實(shí)現(xiàn)滑動(dòng)刪除的相關(guān)資料,需要的朋友可以參考下2016-07-07
Android基礎(chǔ)總結(jié)篇之三:Activity的task相關(guān)介紹
這篇文章主要介紹了Android基礎(chǔ)總結(jié)篇之三:Activity的task相關(guān)介紹,具有一定的參考價(jià)值,有需要的可以了解一下。2016-11-11
AndroidStudio 使用過(guò)程中出現(xiàn)的異常(Gradle sync failed)處理辦法
本文主要介紹AndroidStudio 使用過(guò)程中出現(xiàn)的異常的解決辦法,這里幫大家舉例說(shuō)明,如何處理出現(xiàn)這種問(wèn)題,有需要的小伙伴可以參考下2016-09-09
Android 實(shí)現(xiàn)手機(jī)接通電話后振動(dòng)提示的功能
本文主要介紹Android 實(shí)現(xiàn)手機(jī)接通電話后振動(dòng)提示的功能,這里整理了詳細(xì)的相關(guān)資料,并附有示例代碼,有需要的朋友可以參考下2016-08-08
Android ScrollView 下嵌套 ListView 或 GridView出現(xiàn)問(wèn)題解決辦法
這篇文章主要介紹了ScrollView 下嵌套 ListView 或 GridView 會(huì)發(fā)列表現(xiàn)數(shù)據(jù)只能顯示一行。因?yàn)樗麄兌际菨L動(dòng)結(jié)構(gòu),兩個(gè)滾動(dòng)條放到一起就會(huì)引起沖突,這里提供解決辦法相關(guān)資料,需要的朋友可以參考下2017-07-07
安卓(Android)實(shí)現(xiàn)3DTouch效果
3DTouch是什么效果的大家應(yīng)該都知道了。本文將介紹在Android中如何實(shí)現(xiàn)3DTouch的效果,有需要的可以參考學(xué)習(xí)。2016-08-08
Android提高之模擬信號(hào)示波器的實(shí)現(xiàn)
這篇文章主要介紹了Android模擬信號(hào)示波器的實(shí)現(xiàn)方法,在Android項(xiàng)目開(kāi)發(fā)中有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-08-08
Android drawable微技巧,你不知道的drawable細(xì)節(jié)
今天小編就為大家分享一篇關(guān)于Android drawable微技巧,你不知道的drawable細(xì)節(jié),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10

