編輯:關於Android編程
在上一篇文章中,我們已經新建了虛擬方向鍵的自定義控件DirectionKeys類,下面我們繼續。
本項目中的虛擬方向鍵的背景是4個三角形組成的矩形,其實是4個三角形的按鈕。
系統自帶的按鈕是矩形的,怎麼做一個三角形按鈕呢?
首先我需要了解,所有控件的外觀都是畫出來的,當然不是我們手工去畫而是用程序去畫。
用程序怎麼畫呢?
很多技術平台上都有繪圖功能,用起來也很相似。既然都是面向對象的思想,我們可以與現實中畫畫類比。
首先我們需要一塊畫布(canvas),然後需要一支畫筆(paint)和顏料(color),現實中這就可以畫了。然而現在是要程序去畫,必須要告訴程序你要畫什麼。由於每個人畫的東西不一樣,五花八門,所以畫不同的東西,告訴程序的方式也可能不同。我們畫三角形選擇用path對象告訴程序,下面細講。然後程序就給你畫出來了。
了解了繪圖的基本流程,下面我們用代碼來實現。
在android.view.View中有個方法叫onDraw的方法,我們只要重寫(Override)該父類方法,在該方法中畫我們想要的東西即可。
在Android Studio中輸入onDraw時根據智能提示生成了如下代碼:
/** * 通過重寫父類的onDraw方法來繪制我們需要的圖形 * * @param canvas 這裡的canvas是系統提供的一塊矩形畫布,我們要做的就是在這塊畫布上畫我們想要的東西。 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }
從上面的代碼中可以看到,onDraw方法給我們傳來了一個叫canvas的對象,canvas就是一個畫布,我們可以在上面畫畫。自動生成的“super.onDraw(canvas);”是調用了父類中的onDraw方法,我們可以點進去看看。
/** * Implement this to do your drawing. * * @param canvas the canvas on which the background will be drawn */ protected void onDraw(Canvas canvas) { }
發現父類中的onDraw方法是空的,可以不調用。
現在有畫布了,我們還需要畫筆。這好辦,new一個就行了。
//准備畫筆 Paint paint = new Paint();
畫筆要蘸什麼顏色的顏料呢?比如紅色吧。
//設置畫筆的顏色 paint.setColor(Color.RED);
這裡的顏色是一個int類型的整數,是一個ARGB值。系統提供了幾種常用顏色做為常量,比如Color.RED=0xFFFF0000,你也可以按照自己的喜好設置一種顏色。
下面我們以畫左邊的三角形為例。
畫布上的每一個像素都有它的坐標,坐標系原點是畫布的左上角。要畫三角形就需要知道三個頂點的坐標。
設畫布寬為width,高為height;
則畫布4個頂點和中心點的坐標分別是:
左上點 0,0
左下點 0,height
右上點 width,0
右下點 width,height
中心點 width/2,height/2
那麼左邊三角形的三個頂點坐標分別是(0,0)(width/2,height/2)(0,height)
下面該path對象出場了。path的意思是路徑,它能告訴程序沿著設計好的路徑畫圖。我們知道三角形是由三段直線段組成的,程序中也是這麼設計的:
//畫布的寬 int width = canvas.getWidth(); //畫布的高 int height = canvas.getHeight(); //畫左方向鍵背景三角形的路徑 Path pathLeft = new Path(); //從畫布左上點開始 pathLeft.moveTo(0, 0); //畫直線到畫布中心點 pathLeft.lineTo(width / 2, height / 2); //再畫直線到畫布左下點 pathLeft.lineTo(0, height); //自動閉合圖形。從最後一個點(左下點)畫直線到第一個點(左上點)。 pathLeft.close();
到目前為止DirectionKeys類的所有代碼如下:
package net.chengyujia.happysnake; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.View; /** * Created by ChengYuJia on 2016/8/19. * 屏幕上的虛擬方向鍵 */ public class DirectionKeys extends View { //只有一個參數的構造方法是我們在程序中通過“new”關鍵字創建實例時調用。 public DirectionKeys(Context context) { super(context); } //有兩個參數的構造方法是系統在XML布局文件中創建實例時調用。 public DirectionKeys(Context context, AttributeSet attrs) { super(context, attrs); } /** * 通過重寫父類的onDraw方法來繪制我們需要的圖形 * * @param canvas 這裡的canvas是系統提供的一塊矩形畫布,我們要做的就是在這塊畫布上畫我們想要的東西。 */ @Override protected void onDraw(Canvas canvas) { //畫布的寬 int width = canvas.getWidth(); //畫布的高 int height = canvas.getHeight(); /* (小提示:在計算機中一般都是將左上角作為坐標原點的) 畫布上四個頂點和中心點的坐標如下: 左上點 0,0 左下點 0,height 右上點 width,0 右下點 width,height 中心點 width/2,height/2 */ //畫左方向鍵背景三角形的路徑 Path pathLeft = new Path(); //從畫布左上點開始 pathLeft.moveTo(0, 0); //畫直線到畫布中心點 pathLeft.lineTo(width / 2, height / 2); //再畫直線到畫布左下點 pathLeft.lineTo(0, height); //自動閉合圖形。從最後一個點(左下點)畫直線到第一個點(左上點)。 pathLeft.close(); //准備畫筆 Paint paint = new Paint(); //設置畫筆的顏色 paint.setColor(Color.RED); //設置畫筆為實心(默認就是實心,這裡不設置也行) paint.setStyle(Paint.Style.FILL); //按照剛才的路徑設計畫了一個實心的紅色三角形 canvas.drawPath(pathLeft, paint); } }
現在我們就能用一下我們自定義的控件了,和用系統自帶的控件一樣,只不過在XML布局文件中需要用類的全名做標簽,不然會報錯。
我們將MainActivity的布局文件修改如下:
然後運行一下,截圖如下:
好了,本篇到此結束,下篇繼續。
如果遇到問題可以在下面的評論中交流。^_^
以在搜索框搜索時,自動補全為例:其中還涉及到一個詞,Tokenizer:分詞器,分解器。上效果圖:MainActivity.java:package com.joan.t
項目中很多的Button, 同時配置很多按鈕切圖,Selector是不是很煩, 使用下面這個類,就可以直接為Button增加點擊效果. 不用多個圖片,不用Selector
之前自己的編程完全是在PC上進行的,而且主要是在算法和數據結構上。由於某些需要加之認識到Android的重要性,且大學走到現在基本上沒什麼課了,空閒時間很多,於是就開始學
數據存儲在開發中是使用最頻繁的,在這裡主要介紹Android平台中實現數據存儲的5種方式,更加系統詳細的介紹了5種存儲的方法和異同。 第一種: 使用SharedPre