欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 自定義View步驟

 更新時間:2016年06月07日 09:55:23   作者:雨知  
這篇文章主要介紹了Android 自定義View步驟 的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下

例子如下:Android 自定義View 密碼框 例子

1 良好的自定義View

易用,標準,開放。

一個設計良好的自定義view和其他設計良好的類很像。封裝了某個具有易用性接口的功能組合,這些功能能夠有效地使用CPU和內(nèi)存,并且十分開放的。但是,除了開始一個設計良好的類之外,一個自定義view應該:

l 符合安卓標準

l 提供能夠在Android XML布局中工作的自定義樣式屬性

l 發(fā)送可訪問的事件

l 與多個Android平臺兼容。

Android框架提供了一套基本的類和XML標簽來幫您創(chuàng)建一個新的,滿足這些要求的view。忘記提供屬性和事件是很容易的,尤其是當您是這個自定義view的唯一用戶時。請花一些時間來仔細的定義您view的接口以減少未來維護時所耗費的時間。一個應該遵從的準則是:暴露您view中所有影響可見外觀的屬性或者行為。

2 創(chuàng)建自定義View (步驟)

2.1 繼承View完全自定義或繼承View的派生子類

必須提供一個能夠獲取Context和作為屬性的AttributeSet對象的構(gòu)造函數(shù),獲取屬性,當view從XML布局中創(chuàng)建了之后,XML標簽中所有的屬性都從資源包中讀取出來并作為一個AttributeSet傳遞給view的構(gòu)造函數(shù)。

View 派生出來的直接或間接子類:ImageView, Button, CheckBox, SurfaceView, TextView, ViewGroup, AbsListView

ViewGourp 派生出來的直接或間接子類:AbsoluteLayout, FrameLayout, RelativeLayout, LinearLayout

所有基類、派生類都是Android framework層集成的標準系統(tǒng)類, 可直接引用SDK中這些系統(tǒng)類及其API

2.2 定義自定義屬性

l 在資源元素<declare-styleable>中為您的view定義自定義屬性。

在項目組添加<declare-styleable>資源。這些資源通常是放在res/values/attrs.xm文件里。如下是attrs.xml文件的一個例子:

<resources>;
<declare-styleable name="PieChart">
<attr name="showText" format="boolean" />
<attr name="labelPosition" format="enum">
<enum name="left" value=""/>
<enum name="right" value=""/>
</attr>
</declare-styleable>
</resources>

l 在您的XML布局中使用指定屬性的值。

布局XML文件中可以像內(nèi)建屬性一樣使用它們。唯一不同是自定義屬性屬于不同的命名空間。

http://schemas.android.com/apk/res/[你的自定義View所在的包路徑]

<?xml version="." encoding="utf-"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
<com.example.customviews.charting.PieChart
custom:showText="true"
custom:labelPosition="left" />
</LinearLayout>

l 在運行時取得屬性值。

l 將取回的屬性值應用到您的view中。

2.3 獲取自定義屬性

當view從XML布局中創(chuàng)建了之后,XML標簽中所有的屬性都從資源包中讀取出來并作為一個AttributeSet傳遞給view的構(gòu)造函數(shù)。盡管從AttributeSet中直接讀取值是可以的,但是這樣做有一些缺點:

l 帶有值的資源引用沒有進行處理

l 樣式并沒有得到允許

取而代之的是,將AttributeSet傳遞給obtainStyledAttributes()方法。這個方法傳回了一個TypedArray數(shù)組,包含了已經(jīng)解除引用和樣式化的值。

為了時能能夠更容易的調(diào)用obtainStyledAttributes()方法,Android資源編譯器做了大量的工作。res文件夾 中的每個<declare-styleable>資源,生成的R.java都定義了一個屬性ID的數(shù)組以及一套定義了指向數(shù)組中的每一個屬性 的常量。您可以使用預定義的常量從TypedArry中讀取屬性。下例是PieChart類是如何讀取這些屬性的:

public PieChart(Context ctx, AttributeSet attrs) {
super(ctx, attrs);
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.PieChart,
, );
try {
mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, );
} finally {
a.recycle();
}
}

注意,TypedArry對象是一個共享的資源,使用完畢必須回收它。

2.4 添加屬性和事件

屬性是控制view的行為和外觀的強有力的方式,但是只有view在初始化后這些屬性才可讀。為了提供動態(tài)的行為,需要暴露每個自定義屬性的一對getter和setter。下面的代碼片段顯示PieChart是如何提供showText屬性的。

public boolean isShowText() {
return mShowText;
}
public void setShowText(boolean showText) {
mShowText = showText;
invalidate();
requestLayout();
}

注意,setShowText調(diào)用了invalidate()和requestLayout()。這些調(diào)用關(guān)鍵是為了保證view行為是可靠的。你必須在改變這個可能改變外觀的屬性后廢除這個view,這樣系統(tǒng)才知道需要重繪。同樣,如果屬性的變化可能影響尺寸或者view的形狀,您需要請求一個新的布局。忘記調(diào)用這些方法可能導致難以尋找的bug。

自定義view同樣需要支持和重要事件交流的事件監(jiān)聽器。

2.5 自定義繪制(實施)

繪制自定義視圖里最重要的一步是重寫onDraw()方法. onDraw()的參數(shù)是視圖可以用來繪制自己的Canvas對象. Canvas定義用來繪制文本、線條、位圖和其他圖像單元. 你可以在onDraw()里使用這些方法創(chuàng)建你的自定義用戶界面(UI).

android.graphics框架把繪圖分成了兩部分:

l 畫什么, 由Canvas處理

l 怎么畫, 由Paint處理

例如, Canvas提供畫線條的方法, 而Paint提供定義線條顏色的方法. Canvas提供畫矩形的方法, 而Paint定義是否用顏色填充矩形或讓它為空. 簡而言之, Canvas定義你可以在屏幕上畫的形狀, 而Paint為你畫的每個形狀定義顏色、樣式、字體等等.

onDraw()不提供3d圖形api的支持。如果你需要3d圖形支持,必須繼承SurfaceView而不是View,并且通過單獨的線程畫圖。

3 優(yōu)化

3.1 降低刷新頻率

為了提高view的運行速度,減少來自于頻繁調(diào)用的程序的不必要的代碼。從onDraw()方法開始調(diào)用,這會給你帶來最好的回報。特別地,在onDraw()方法中你應該減少冗余代碼,冗余代碼會帶來使你view不連貫的垃圾回收。初始化的冗余對象,或者動畫之間的,在動畫運行時,永遠都不會有所貢獻。

加之為了使onDraw()方法更有依賴性,你應該盡可能的不要頻繁的調(diào)用它。大部分時候調(diào)用 onDraw()方法就是調(diào)用invalidate()的結(jié)果,所以減少不必要的調(diào)用invalidate()方法。有可能的,調(diào)用四種參數(shù)不同類型的invalidate(),而不是調(diào)用無參的版本。無參變量需要刷新整個view,而四種參數(shù)類型的變量只需刷新指定部分的view.這種高效的調(diào)用更加接近需求,也能減少落在矩形屏幕外的不必 要刷新的頁面。

3.2 使用硬件加速

作為Android3.0,Android2D圖表系統(tǒng)可以通過大部分新的Android裝置自帶GPU(圖表處理單元)來增加,對于許多應用程序 來說,GPU硬件加速度能帶來巨大的性能增加,但是對于每一個應用來講,并不都是正確的選擇。Android框架層更好地為你提供了控制應用程序部分硬件 是否增加的能力。

怎樣在你的應用,活動,或者窗體級別中使用加速度類,請查閱Android開發(fā)者指南中的Hardware Acceleration類。注意到在開發(fā)者指南中的附加說明,你必須在你的AndroidManifest.xml 文件中的<uses-sdk android:targetSdkVersion="11"/>中將應用目標API設置到11或者更高的級別。

一旦你使用硬件加速度類,你可能沒有看到性能的增長,手機GPUs非常擅長某些任務,例如測量,翻轉(zhuǎn),和平移位圖類的圖片。特別地,他們不擅長其他的任務,例如畫直線和曲線。為了利用GPU加速度類,你應該增加GPU擅長的操作數(shù)量,和減少GPU不擅長的操作數(shù)量。

相關(guān)文章

  • Android 7.0新特性詳解

    Android 7.0新特性詳解

    本篇文章主要介紹了Android 7.0(牛軋?zhí)?新特性的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • Android系統(tǒng)進程間通信(IPC)機制Binder中的Client獲得Server遠程接口過程源代碼分析

    Android系統(tǒng)進程間通信(IPC)機制Binder中的Client獲得Server遠程接口過程源代碼分析

    本文主要介紹Android 通信Binder中的Client獲得Server遠程接口,這里對Android Binder 中Client中Server 源碼做了詳細分析介紹,有研究Android源碼的小伙伴可以參考下
    2016-08-08
  • Android攔截外撥電話程序示例

    Android攔截外撥電話程序示例

    這篇文章主要介紹了Android攔截外撥電話的示例,大家參考使用吧
    2013-11-11
  • Android短信驗證碼(用的Mob短信驗證)

    Android短信驗證碼(用的Mob短信驗證)

    這篇文章主要為大家詳細介紹了Android短信驗證碼,使用Mob短信驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android實現(xiàn)邊錄邊播應用

    Android實現(xiàn)邊錄邊播應用

    這篇文章主要為大家詳細介紹了Android實現(xiàn)邊錄邊播應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 深入淺析Android JSON解析

    深入淺析Android JSON解析

    android中網(wǎng)絡數(shù)據(jù)傳輸是經(jīng)常被用到的,通常我們使用xml或者json,而json更加輕量,便捷,我們使用的更多。我自己在項目中使用很多,今天就說說android中怎么去解析JSON,幫助自己總結(jié)內(nèi)容,同時幫助別人少走彎路
    2015-12-12
  • Android開發(fā)中播放聲音的兩種方法分析

    Android開發(fā)中播放聲音的兩種方法分析

    這篇文章主要介紹了Android開發(fā)中播放聲音的兩種方法,結(jié)合實例形式簡單分析了Android音頻播放的常用函數(shù)、使用方法及相關(guān)注意事項,需要的朋友可以參考下
    2017-09-09
  • Android 中cookie的處理詳解

    Android 中cookie的處理詳解

    這篇文章主要介紹了Android 中cookie的處理詳解的相關(guān)資料,主要介紹Android 中Cookie 的操作,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • MobLink?Android?快速集成指南

    MobLink?Android?快速集成指南

    這篇文章主要為大家介紹了MobLink?Android?快速集成指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Android實現(xiàn)快速滾動FastScrollView效果

    Android實現(xiàn)快速滾動FastScrollView效果

    這篇文章主要介紹了Android實現(xiàn)快速滾動FastScrollView效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論