Android零基础入门第24节:自定义View简单使用
當我們開發中遇到Android原生的組件無法滿足需求時,這時候就應該自定義View來滿足這些特殊的組件需求。
?
一、概述
很多初入Android開發的程序員,對于Android自定義View可能比較恐懼,但這又是高手進階的必經之路,這里先不做過多學習,只是簡單了解。關于高階的內容會在后續課程陸續進行學習,歡迎關注分享達人秀(ShareExpert)獲取第一手教程。
如果說要按類型來劃分的話,自定義View的實現方式大概可以分為三種:自繪控件、組合控件、以及繼承控件。
-
自繪控件:內容都是開發者自己繪制出來的,一般在View的onDraw方法中完成繪制。
-
組合控件:就是將一些小的控件組合起來形成一個新的控件,這些小的控件多是系統自帶的控件。比如很多應用中普遍使用的標題欄控件,其實用的就是組合控件。
-
繼承控件:繼承已有的控件,創建新控件,保留繼承的父控件的特性,并且還可以引入新特性。
?
二、方法
介于目前掌握的Android基礎知識較為薄弱,本節先簡單學習一下自繪控件。首先定義一個繼承View基類的子類,然后重寫View 類的一個或多個方法。通常可以被用戶重寫的方法如下。
-
構造器:重寫構造器是定制View的最基本方式,當Java代碼創建一個View實例,或根據XML布局文件加載并構建界面時將需要調用該構造器。
-
onFinishInflate():這是一個回調方法,當應用從XML布局文件加載該組件并利用它 來構建界面之后,該方法將會被回調。
-
onMeasure(int, int):調用該方法來檢測View組件及其所包含的所有子組件的大小。
-
onLayout(boolean, int, int, int, int):當該組件需要分配其子組件的位置、大小時,該方法就會被回調。
-
onSizeChanged(int, int, int, int):當該組件的大小被改變時回調該方法。
-
onDraw(Canvas):當該組件將要繪制它的內容時回調該方法進行繪制。
-
onKeyDown(int, KeyEvent):當某個鍵被按下時觸發該方法。
-
onKeyUp(int, KeyEvent):當松開某個鍵時觸發該方法。
-
onTrackballEvent(MotionEvent):當發生軌跡球事件時觸發該方法。
-
onTouchEvent(MotionEvent):當發生觸摸屏事件時觸發該方法。
-
onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect):當該組件焦點發生改變時觸發該方法。
-
onWindowFocusChanged(boolean):當包含該組件的窗口失去或得到焦點時觸發該方法。
-
onAttachedToWindow():當把該組件放入某個窗口時觸發該方法。
-
onDetachedFromWindow():當把該組件從某個窗口上分離時觸發該方法。
-
onWindowVisibilityChanged(int):當包含該組件的窗口的可見性發生改變時觸發該方法。
當需要開發自定義View時,開發者并不需要重寫上面列出的所有方法,而是可以根據業務需要重寫其中部分方法。
?
三、示例
下面就實現一個簡單的計數器,每點擊它一次,計數值就加1并顯示出來。
在src/main/java文件下創建新包com.jinyu.cqkxzsxy.android.widgetsample.view,再新建一個CounterView.java文件,其代碼如下:
package com.jinyu.cqkxzsxy.android.widgetsample.view;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View;/*** @創建者 鑫鱻* @描述 Android零基礎入門到精通系列教程,歡迎關注微信公眾ShareExpert*/public class CounterView extends View {// 定義畫筆private Paint mPaint;// 用于獲取文字的寬和高private Rect mBounds;// 計數值,每點擊一次本控件,其值增加1private int mCount = 0;public CounterView(Context context, AttributeSet attrs) {super(context, attrs);// 初始化畫筆、RectmPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mBounds = new Rect();// 本控件的點擊事件setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {mCount ++;// 重繪 invalidate();}});}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mPaint.setColor(Color.BLUE);// 繪制一個填充色為藍色的矩形canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);mPaint.setColor(Color.YELLOW);mPaint.setTextSize(50);String text = String.valueOf(mCount);// 獲取文字的寬和高mPaint.getTextBounds(text, 0, text.length(), mBounds);float textWidth = mBounds.width();float textHeight = mBounds.height();// 繪制字符串canvas.drawText(text, getWidth() / 2 - textWidth / 2, getHeight() / 2+ textHeight / 2, mPaint);} }關于里面的代碼不懂也沒有關系,后續會詳細進行學習的。
到res/layout/目錄下創建一個counterview_layout.xml文件,然后在其中填充如下代碼片段:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><com.jinyu.cqkxzsxy.android.widgetsample.view.CounterViewandroid:id="@+id/counter_view"android:layout_width="100dp"android:layout_height="100dp"/> </LinearLayout>然后修改一下app/src/java/MainActivity.java文件中加載的布局文件為新建的counterview_layout.xml文件。
運行程序,點擊自定義的計數控件,會發現每點擊一次控件里面的值+1,如下圖所示效果。
至此,一些Android開發中一些常用的控件學習完畢,還記得學過哪些控件嗎?都掌握的如何?我們從下一期開始一起來學習Android中的界面布局。
?
今天就先到這里,如果有問題歡迎留言一起探討,也歡迎加入Android零基礎入門技術討論微信群,共同成長!
此文章版權為微信公眾號分享達人秀(ShareExpert)——鑫鱻所有,若轉載請備注出處,特此聲明!
?
往期總結分享:
Android零基礎入門第1節:Android的前世今生
Android零基礎入門第2節:Android 系統架構和應用組件那些事
Android零基礎入門第3節:帶你一起來聊一聊Android開發環境
Android零基礎入門第4節:正確安裝和配置JDK, 高富帥養成第一招
Android零基礎入門第5節:善用ADT Bundle, 輕松邂逅女神
Android零基礎入門第6節:配置優化SDK Manager, 正式約會女神
Android零基礎入門第7節:搞定Android模擬器,開啟甜蜜之旅
Android零基礎入門第8節:HelloWorld,我的第一趟旅程出發點
Android零基礎入門第9節:Android應用實戰,不懂代碼也可以開發
Android零基礎入門第10節:開發IDE大升級,終于迎來了Android Studio
Android零基礎入門第11節:簡單幾步帶你飛,運行Android Studio工程
Android零基礎入門第12節:熟悉Android Studio界面,開始裝逼賣萌
Android零基礎入門第13節:Android Studio配置優化,打造開發利器
Android零基礎入門第14節:使用高速Genymotion,跨入火箭時代
Android零基礎入門第15節:掌握Android Studio項目結構,揚帆起航
Android零基礎入門第16節:Android用戶界面開發概述
Android零基礎入門第17節:TextView屬性和方法大全
Android零基礎入門第18節:EditText的屬性和使用方法
Android零基礎入門第19節:Button使用詳解
Android零基礎入門第20節:CheckBox和RadioButton使用大全
Android零基礎入門第21節:ToggleButton和Switch使用大全
Android零基礎入門第22節:ImageView的屬性和方法大全
Android零基礎入門第23節:ImageButton和ZoomButton使用大全
posted on 2017-08-12 10:39 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/7349212.html
總結
以上是生活随笔為你收集整理的Android零基础入门第24节:自定义View简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 P1200 [USACO1.1]你
- 下一篇: Android源码学习(3) Handl