Android UI開發專題(轉)

http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255
Android UI開發專題(一) 之界面設計

近期不少網友對Android用戶界面的設計表示很感興趣,對於Android UI開發自繪控件和遊戲製做而言掌握好繪圖基礎是必不可少的。本次專題分10節來說述,有關OpenGL ES相關的可能將放到之後再透露。本次主要涉及如下四個包的相關內容:  android.content.res 資源類
  android.graphics 底層圖形類
  android.view 顯示類
  android.widget 控件類

  1、android.content.res.Resources

  對於Android平臺的資源類android.content.res.Resources可能不少網友比較陌生,一塊兒來看看SDK上是怎麼介紹的吧,Contains classes for accessing application resources, such as raw asset files, colors, drawables, media or other other files in the package, plus important device configuration details (orientation, input types, etc.) that affect how the application may behave.平時用到的二進制源文件raw、顏色colors、圖形drawables和多媒體文件media的相關資源均經過該類來管理。
  int getColor(int id) 對應res/values/colors.xml
  Drawable getDrawable(int id) 對應res/drawable/
  XmlResourceParser getLayout(int id) 對應res/layout/
  String getString(int id) 和CharSequence getText(int id) 對應res/values/strings.xml
  InputStream openRawResource(int id) 對應res/raw/
  void parseBundleExtra (String tagName, AttributeSet attrs, Bundle outBundle) 對應res/xml/
  String[] getStringArray(int id) res/values/arrays.xml
  float getDimension(int id) res/values/dimens.xml

  2、android.graphics.Bitmap

  做爲位圖操做類,Bitmap提供了不少實用的方法,經常使用的咱們總結以下:
  boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream) 壓縮一個Bitmap對象根據相關的編碼、畫質保存到一個OutputStream中。其中第一個壓縮格式目前有JPG和PNG
  void copyPixelsFromBuffer(Buffer src) 從一個Buffer緩衝區複製位圖像素
  void copyPixelsToBuffer(Buffer dst) 將當前位圖像素內容複製到一個Buffer緩衝區
  咱們看到建立位圖對象createBitmap包含了6種方法在目前的Android 2.1 SDK中,固然他們使用的是API Level均爲1,因此說從Android 1.0 SDK開始就支持了,因此你們能夠放心使用。
  static Bitmap createBitmap(Bitmap src)
  static Bitmap createBitmap(int[] colors, int width, int height, Bitmap.Config config)
  static Bitmap createBitmap(int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
  static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
  static Bitmap createBitmap(int width, int height, Bitmap.Config config)
  static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height)
  static Bitmap createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) //建立一個能夠縮放的位圖對象
  final int getHeight() 獲取高度
  final int getWidth() 獲取寬度
  final boolean hasAlpha() 是否有透明通道
  void setPixel(int x, int y, int color) 設置某像素的顏色
  int getPixel(int x, int y) 獲取某像素的顏色,android開發網提示這裏返回的int型是color的定義

  3、android.graphics.BitmapFactory

  做爲Bitmap對象的I/O類,BitmapFactory類提供了豐富的構造Bitmap對象的方法,好比從一個字節數組、文件系統、資源ID、以及輸入流中來建立一個Bitmap對象,下面本類的所有成員,除了decodeFileDescriptor外其餘的重載方法都很經常使用。
  static Bitmap decodeByteArray(byte[] data, int offset, int length) //從字節數組建立
  static Bitmap decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)
  static Bitmap decodeFile(String pathName, BitmapFactory.Options opts) //從文件建立,路徑要寫全
  static Bitmap decodeFile(String pathName)
  static Bitmap decodeFileDescriptor(FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts) //從輸入流句柄建立
  static Bitmap decodeFileDescriptor(FileDescriptor fd)
  static Bitmap decodeResource(Resources res, int id) //從Android的APK文件資源中建立,android123提示是從/res/的drawable中
  static Bitmap decodeResource(Resources res, int id, BitmapFactory.Options opts)
  static Bitmap decodeResourceStream(Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)
  static Bitmap decodeStream(InputStream is) //從一個輸入流中建立
  static Bitmap decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)

  4、android.graphics.Canvas

  從J2ME MIDLET時咱們就知道Java提供了Canvas類,而目前在Android平臺中,它主要任務爲管理繪製過程,The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).
  該類主要提供了三種構造方法,分別爲構造一個空的Canvas、從Bitmap中構造和從GL對象中建立,以下
  Canvas()
  Canvas(Bitmap bitmap)
  Canvas(GL gl)
  同時Canvas類的一些字段保存着重要的繪製方法定義,好比Canvas.HAS_ALPHA_LAYER_SAVE_FLAG 保存時須要alpha層,對於Canvas類提供的方法不少,每一個都很重要,下面咱們一一做介紹
  boolean clipPath(Path path)
  boolean clipPath(Path path, Region.Op op)
  boolean clipRect(float left, float top, float right, float bottom)
  boolean clipRect(Rect rect)
  boolean clipRect(float left, float top, float right, float bottom, Region.Op op)
  boolean clipRect(Rect rect, Region.Op op)
  boolean clipRect(RectF rect)
  boolean clipRect(RectF rect, Region.Op op)
  boolean clipRect(int left, int top, int right, int bottom)
  boolean clipRegion(Region region, Region.Op op)
  boolean clipRegion(Region region)
  void concat(Matrix matrix)
  void drawARGB(int a, int r, int g, int b)
  void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
  void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
  void drawBitmap(int[] colors, int offset, int stride, float x, float y, int width, int height, boolean hasAlpha, Paint paint)
  void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
  void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
  void drawBitmap(int[] colors, int offset, int stride, int x, int y, int width, int height, boolean hasAlpha, Paint paint)
  void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
  void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)
  void drawCircle(float cx, float cy, float radius, Paint paint)
  void drawColor(int color)
  void drawColor(int color, PorterDuff.Mode mode)
  void drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
  void drawLines(float[] pts, Paint paint)
  void drawLines(float[] pts, int offset, int count, Paint paint)
  void drawOval(RectF oval, Paint paint)
  void drawPaint(Paint paint)
  void drawPath(Path path, Paint paint)
  void drawPicture(Picture picture, RectF dst)
  void drawPicture(Picture picture, Rect dst)
  void drawPicture(Picture picture)
  void drawPoint(float x, float y, Paint paint)
  void drawPoints(float[] pts, int offset, int count, Paint paint)
  void drawPoints(float[] pts, Paint paint)
  void drawPosText(char[] text, int index, int count, float[] pos, Paint paint)
  void drawPosText(String text, float[] pos, Paint paint)
  void drawRGB(int r, int g, int b)
  void drawRect(RectF rect, Paint paint)
  void drawRect(float left, float top, float right, float bottom, Paint paint)
  void drawRect(Rect r, Paint paint)
  void drawRoundRect(RectF rect, float rx, float ry, Paint paint)
  void drawText(String text, int start, int end, float x, float y, Paint paint)
  void drawText(char[] text, int index, int count, float x, float y, Paint paint)
  void drawText(String text, float x, float y, Paint paint)
  void drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
  void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
  void drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
  void drawVertices(Canvas.VertexMode mode, int vertexCount, float[] verts, int vertOffset, float[] texs, int texOffset, int[] colors, int colorOffset, short[] indices, int indexOffset, int indexCount, Paint paint)
  static void freeGlCaches()
  boolean getClipBounds(Rect bounds)
  final Rect getClipBounds()
  int getDensity()
  DrawFilter getDrawFilter()
  GL getGL()
  int getHeight()
  void getMatrix(Matrix ctm)
  final Matrix getMatrix()
  int getSaveCount()
  int getWidth()
  boolean isOpaque()
  boolean quickReject(Path path, Canvas.EdgeType type)
  boolean quickReject(float left, float top, float right, float bottom, Canvas.EdgeType type)
  boolean quickReject(RectF rect, Canvas.EdgeType type)
  void restore()
  void restoreToCount(int saveCount)
  final void rotate(float degrees, float px, float py)
  void rotate(float degrees)
  int save()
  int save(int saveFlags)
  int saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags)
  int saveLayer(RectF bounds, Paint paint, int saveFlags)
  int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags)
  int saveLayerAlpha(RectF bounds, int alpha, int saveFlags)
  final void scale(float sx, float sy, float px, float py)
  void scale(float sx, float sy)
  void setBitmap(Bitmap bitmap)
  void setDensity(int density)
  void setDrawFilter(DrawFilter filter)
  void setMatrix(Matrix matrix)
  void setViewport(int width, int height)
  void skew(float sx, float sy)
  void translate(float dx, float dy)

  5、android.graphics.Color

  有關Android平臺上表示顏色的方法有不少種,Color提供了常規主要顏色的定義好比Color.BLACK和Color.GREEN等等,咱們平時建立時主要使用如下靜態方法
  static int argb(int alpha, int red, int green, int blue) 構造一個包含透明對象的顏色
  static int rgb(int red, int green, int blue) 構造一個標準的顏色對象
  static int parseColor(String colorString) 解析一種顏色字符串的值,好比傳入Color.BLACK
  本類返回的均爲一個整形相似 綠色爲0xff00ff00,紅色爲0xffff0000。咱們將這個DWORD型看作AARRGGBB,AA表明Aphla透明色,後面的就不難理解,每一個分紅WORD整好爲0-255。

Android UI開發專題(二) 之繪圖基礎


今天咱們繼續介紹Android平臺底層繪圖類的相關內容,在Android UI開發專題(一) 之界面設計中咱們介紹了有關Android平臺資源使用以及Bitmap相關類的操做,接下來將會以實例的方式給你們演示各類類的用處以及注意點。今天咱們繼續瞭解android.graphics包中比較重要的繪圖類。
  1、 android.graphics.Matrix

  有關圖形的變換、縮放等相關操做經常使用的方法有:
  void reset() // 重置一個matrix對象。
  void set(Matrix src) //複製一個源矩陣,和本類的構造方法 Matrix(Matrix src) 同樣
  boolean isIdentity() //返回這個矩陣是否認義(已經有意義)
  void setRotate(float degrees) //指定一個角度以0,0爲座標進行旋轉
  void setRotate(float degrees, float px, float py) //指定一個角度以px,py爲座標進行旋轉
  void setScale(float sx, float sy) // 縮放
  void setScale(float sx, float sy, float px, float py) //以座標px,py進行縮放
  void setTranslate(float dx, float dy) //平移
  void setSkew (float kx, float ky, float px, float py) //以座標px,py進行傾斜
  void setSkew (float kx, float ky) //傾斜

  2、android.graphics.NinePatch

  NinePatch是Android平臺特有的一種非矢量圖形天然拉伸處理方法,能夠幫助常規的圖形在拉伸時不會縮放,實例中Android開發網提示你們對於Toast的顯示就是該原理,同時SDK中提供了一個工具名爲Draw 9-Patch,有關該工具的使用方法能夠參考咱們經發布的 Draw 9-Patch使用方法介紹一文。因爲該類提供了高質量支持透明的縮放方式,因此圖形格式爲PNG,文件命名方式爲.9.png 的後綴好比android123.9.png。

  3、android.graphics.Paint

  Paint類咱們能夠理解爲畫筆、畫刷的屬性定義,本類經常使用的方法以下:
  void reset() //重置
  void setARGB(int a, int r, int g, int b) 或 void setColor(int color) 均爲設置Paint對象的顏色
  void setAntiAlias(boolean aa) //是否抗鋸齒,須要配合void setFlags (Paint.ANTI_ALIAS_FLAG) 來幫助消除鋸齒使其邊緣更平滑。
  Shader setShader(Shader shader) //設置陰影,Shader類是一個矩陣對象,若是爲NULL將清除陰影。
  void setStyle(Paint.Style style) //設置樣式,通常爲 FILL 填充,或者STROKE凹陷效果。
  void setTextSize(float textSize) //設置字體大小
  void setTextAlign(Paint.Align align) //文本對齊方式
  Typeface setTypeface(Typeface typeface) //設置字體,經過Typeface能夠加載Android內部的字體,通常爲宋體對於中文,部分ROM能夠本身添加好比雅黑等等
  void setUnderlineText(boolean underlineText) //是否設置下劃線,須要撇和void setFlags (Paint.UNDERLINE_TEXT_FLAG) 方法。

  4、android.graphics.Rect

  Rect咱們能夠理解爲矩形區域,相似的還有Point一個點,Rect類除了表示一個矩形區域位置描述外,android123提示主要能夠幫助咱們計算圖形之間是否碰撞(包含)關係,對於Android遊戲開發比較有用,其主要的成員contains包含了三種重載方法,來判斷包含關係
  boolean contains(int left, int top, int right, int bottom)
  boolean contains(int x, int y)
  boolean contains(Rect r)

  5、android.graphics.Region

  Region在Android平臺中表示一個區域和Rect不一樣的是,它表示的是一個不規則的樣子,能夠是橢圓、多邊形等等,而Rect僅僅是矩形。一樣Region的boolean contains(int x, int y) 成員能夠判斷一個點是否在該區域內

  6、android.graphics.Typeface

  Typeface類是幫助描述一個字體對象,在TextView中經過使用setTypeface方法來制定一個輸出文本的字體,其直接構造調用成員create方法能夠直接指定一個字體名稱和樣式,好比
  static Typeface create(Typeface family, int style)
  static Typeface create(String familyName, int style)
  同時使用isBold和isItalic方法能夠判斷出是否包含粗體或斜體的字型。
  final boolean isBold()
  final boolean isItalic()
  該類的建立方法還有從apk的資源或從一個具體的文件路徑,其具體方法爲
  static Typeface createFromAsset(AssetManager mgr, String path)
  static Typeface createFromFile(File path)
  static Typeface createFromFile(String path)
  有關Android平臺的圖形、圖像咱們在前兩節中已經整理出來,下次咱們將首先講述下NinePatch的實例應用。

Android UI開發專題(三) 各類Drawable
本次咱們主要講解Android平臺下的各類Drawable,這裏在SDK的android.graphics.drawable包下面能夠看到有各類Drawable類多達十幾種,它們到底之間有什麼關係和區別呢?

  1、AnimationDrawable

  顧名思義該類主要表示動畫的圖形類,能夠實現逐幀播放的效果,下面代碼示例以下
  1. 定義一個cwj_animation.xml 放到res/drawable 目錄下,其中定義的屬性duration爲延時,單位爲毫秒,而oneshot屬性表示是否僅播放一次,內容爲:
1<animation-list android:id="selected" android:oneshot="false">
2<item android:drawable="@drawable/cwj0" android:duration="30"
/>
3<item android:drawable="@drawable/cwj1" android:duration="30"
/>
4<item android:drawable="@drawable/cwj2" android:duration="30"
/>
5<item android:drawable="@drawable/cwj3" android:duration="30"
/>
6<item android:drawable="@drawable/cwj4" android:duration="30"
/>
7<item android:drawable="@drawable/cwj5" android:duration="30"
/>
8</animation-list>
9
10

       2.在java中調用也很簡單
  ImageView img = (ImageView)findViewById(R.id.cwj_image); //首先聲明一個ImageView對象在xml佈局文件中
  img.setBackgroundResource(R.drawable.cwj_animation); //咱們剛纔的animation定義的xml文件
  AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground(); //構造AnimationDrawable對象
  frameAnimation.start() //開始播放動畫
  3. AnimationDrawable類還提供了一些經常使用的方法以下:
  void stop() 中止
  void addFrame(Drawable frame, int duration) 添加一幀,相似xml中的佈局
  Drawable getFrame(int index) 返回某幀的Drawable圖形
  int getNumberOfFrames() 返回總共動畫幀數
  boolean isOneShot() 是否僅播放一次
  boolean isRunning() 是否正在播放

  2、BitmapDrawable

  在Android平臺中對於縮放、變形的Bitmap對象由BitmapDrawable類表示,其構造方法也很簡單,因爲該類繼承於android.graphics.drawable.Drawable,相對Drawable而言提供了更多的有關位圖的操做方法,主要的構造方法以下:
  BitmapDrawable() //直接構造一個空的對象,這樣方式不推薦使用,SDK標記爲deprecated.將來可能沒法使用。
  BitmapDrawable(Resources res) //從資源中構造
  BitmapDrawable(Bitmap bitmap) //從Bitmap對象直接構造,但也是不推薦,而是但願用下一種
  BitmapDrawable(Resources res, Bitmap bitmap) //從bitmap中建立設置初始的分辨率從res中
  BitmapDrawable(String filepath) //從具體文件路徑構造,也不推薦使用,而是下一種更好
  BitmapDrawable(Resources res, String filepath) //同上
  BitmapDrawable(InputStream is) //從輸入流中構造,一樣推薦下面的方法
  BitmapDrawable(Resources res, InputStream is) //同上
  在BitmapDrawable類中相對於Drawable類主要新增瞭如下幾種方法,均比較實用:
  final Bitmap getBitmap() 獲取一個Bitmap對象
  int getOpacity() //獲取透明度
  void setAntiAlias(boolean aa) //是否抗鋸齒
  void setTargetDensity(Canvas canvas) //設置目標Canvas密度
  void setTargetDensity(DisplayMetrics metrics)

  3、ClipDrawable

  ColorDrawable
  Drawable
  GradientDrawable
  InsetDrawable
  LayerDrawable
  LevelListDrawable
  NinePatchDrawable
  PaintDrawable
  PictureDrawable
  RotateDrawable
  ScaleDrawable
  ShapeDrawable
  StateListDrawable
  TransitionDrawable
  以上的類型在常見的開發通常較少出現,主要是基類構造使用,Android內部的多個Widget基礎控件使用了,感興趣的網友能夠查看開源GIT中的相關內容。

Android UI開發專題(四) View自繪控件
      不少時候想要設計漂亮的Android UI,使用Android自帶的控件沒法知足咱們的須要就要考慮自繪控件,在Android界面顯示類View,能夠經過繼承擴展重寫相關方法來實現咱們的圖形繪製。
  首先咱們須要瞭解下View類的底層實現,在SDK中咱們能夠看到View直接繼承於Java的基類Object,實現了圖形繪製和按鍵事件Drawable.Callback KeyEvent.Callback的相關方法,咱們自繪時主要實現其內部的onDraw方法,相關的界面計算能夠重寫onMeasure方法,對於相關的按鍵能夠重載onKeyDown、onKeyUp以及onTouchEvent等,下面android開發網就以一個實例來表示。
  public class cwjView extendsView
  {
  public cwjView(Context context)
  {
  this(context,null);
  }
  public cwjView(Context context,AttributeSet attrs)
  {
  this(context,attrs,0);
  }
  public cwjView(Context context,AttributeSet attrs,int defStyle)
  {
  super(context,attrs,defStyle);
  //這裏是本類的構造,相關初始化能夠在這裏添加代碼
  }
  @Override
  protectd void onDraw(Canvas canvas)
  {
  super(canvas);
  //繪圖的關鍵,能夠看到已經包含了一個canvas句柄,能夠直接經過咱們前面講到的Canvas類進行相關的操做,完整的例子,你們能夠參考Android SDK中例子Snake貪食蛇遊戲的實現。
  }
  }
  有關View類的更新,咱們直接經過調用invalidate(int l,int r,int r,int b)來更新一個Rect矩形區域,或更新所有,同時在線程中咱們使用須要調用postInvalidate來更新界面。


Android UI開發(五)Bitmap和Canvas實例

     在Android UI開發專題的前五節咱們講到的東西主要是基礎和理論內容,從本次Android123將經過實例代碼來演示,本次主要是Bitmap和Canvas類的使用,根據要求縮放Bitmap對象並返回新的Bitmap對象。centerToFit方法一共有4個參數,返回一個Bitmap類型,第一個參數爲原始的位圖對象,width和height分別爲新的寬和高,而Context是用來加載資源的上下文實例。
1Bitmap centerToFit(Bitmap bitmap,int width,int height, Context context) {
2
3  finalint bitmapWidth= bitmap.getWidth();//獲取原始bitmap的寬度
4
5  finalint bitmapHeight= bitmap.getHeight();
6
7  if (bitmapWidth< width || bitmapHeight< height) {
8
9  int color= context.getResources().getColor(R.color.window_background);//從資源讀取背景色
10
11  Bitmap centered= Bitmap.createBitmap(bitmapWidth< width ? width : bitmapWidth,
12
13  bitmapHeight< height ? height : bitmapHeight, Bitmap.Config.RGB_565);
14
15  centered.setDensity(bitmap.getDensity());
16
17  Canvas canvas=
new Canvas(centered);
18
19  canvas.drawColor(color);//先繪製背景色
20
21  canvas.drawBitmap(bitmap, (width- bitmapWidth)/
2.0f, (height- bitmapHeight)/
2.0f,null);//經過Canvas繪製Bitmap
22
23  bitmap= centered;
24
25  }
26
27  return bitmap;//返回新的bitmap
28
29  }
30
31

  本段代碼從Android 2.1開始將會應用在全新的Home主屏上,同時相關的ImageView的適應屏幕大小的setScaleType(fitCenter) 方法相似,僅僅是咱們制定了將來的大小。

GraphableButton類實現Android UI開發
      從Android 1.6開始,系統設置中的電池使用記錄提供了一種簡單的自繪Button按鈕演示-GraphableButton類,經過GraphableButton咱們能夠很清晰的瞭解到前幾回Android123講到的UI開發要點。
1  public class GraphableButton extends Button {//從Button類繼承
2
3  private static finalString TAG=
"GraphableButton";
4
5  static Paint[] sPaint=
new Paint[2];//定義兩種顏色
6
7  static {
8
9  sPaint[0]=
new Paint();
10
11  sPaint[0].setStyle(Paint.Style.FILL);
12
13  sPaint[0].setColor(0xFF0080FF);
14
15  sPaint[1]=
new Paint();
16
17  sPaint[1].setStyle(Paint.Style.FILL);
18
19  sPaint[1].setColor(0xFFFF6060);
20
21  }
22
23  double[] mValues;
24
25  public GraphableButton(Context context, AttributeSet attrs) {
26
27  super(context, attrs);
28
29  }
30
31  public void setValues(double[] values,double maxValue) {//設置顯示範圍,下文提到
32
33  mValues= values.clone();
34
35  for (int i=
0; i< values.length; i++) {
36
37  mValues/=maxValue;
38
 39  }
40
 41  }
42
43  @Override
44
45  public void onDraw(Canvas canvas) {//重寫onDraw直接繪製
46
47  Log.i(TAG,"onDraw: w ="
+ getWidth()+
", h ="
+ getHeight());
48
49  int xmin= getPaddingLeft();
50
51  int xmax= getWidth()- getPaddingRight();
52
53  int ymin= getPaddingTop();
54
55  int ymax= getHeight()- getPaddingBottom();
56
57  int startx= xmin;
58
59  for (int i=
0; i< mValues.length; i++) {
60
61  int endx= xmin+ (int) (mValues* (xmax- xmin));
62
63  canvas.drawRect(startx, ymin, endx, ymax, sPaint);//經過canvas繪製範圍
64
65  // 該方法原型 drawRect(floatleft, float top, floatright, float bottom, Paint paint)
66
67  startx= endx;
68
69  }
70
71  super.onDraw(canvas);
72
73  }
74
75  }
76

  調用方法很簡單,和普通的Button沒有什麼區別,這裏咱們僅僅多定義了setValues方法,Android開發網提醒網喲注意佈局文件xml中如何定義,在最下文
1  private GraphableButton mButtons;
2
3  mButtons= (GraphableButton) findViewById(R.id.button0);
4
5  mButtons.setOnClickListener(this);//設置一個按下事件監聽
6
7  mButtons.setVisibility(View.INVISIBLE);//設置當前按鈕不可見
8
9  mButtons.setText("android123.com歡迎您");
10
11  mButtons.setValues(0,100);
12
13  mButtons.setVisibility(View.VISIBLE);//設置按鈕可見
14

  下面在layout.xml中如何寫呢,這裏要寫上本身程序完整的package name才能正確被adt識別,相關的具體定義以下:
1  android:id="@+id/button7"
2
3  android:layout_width="fill_parent"
4
5  android:layout_height="0dp"
6
7  android:layout_marginLeft="4dp"
8
9  android:layout_marginRight="4dp"
10
11  android:layout_marginBottom="4dp"
12
13  android:layout_weight="1"
/>
相關文章
相關標籤/搜索