Trung tâm Tin học – ĐH KHTN Tạo button riêng Bạn đã bao giờ thấy nhàm chán các control mặc định sẵn của Android chưa ?? Hay bạn cần 1 chút gì đó đặc biệt cho ứng dụng của bạn ?? Nếu có thì bạn có thể tham thảo bài viết này để tạo 1 button riêng đầy sống động Đầu tiên các bạn tạo 1 Project như sau: Project name: ChinhButton Build Target: Android 2.3.3 Application name: ChinhButton Package name: com.dac.ChinhButton Create Activity: ChinhButton Bước tiếp theo, các bạn cần 1 class có extends Button để làm button riêng của bạn. Tạo class MyButton.java trong package chính và viết code như sau: package com.dac.ChinhButton; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader; import android.graphics.SweepGradient; import android.util.AttributeSet; import android.util.Log; import android.widget.Button; public class MyButton extends Button { private Paint mTextPaint, mPaint; private String mText; private int mAscent; private Shader mShader; private Matrix mMatrix = new Matrix(); private float mStart; private float mSweep; private float mRotate; private static final float SWEEP_INC = 2; private static final float START_INC = 15; public MyButton(Context context) { super(context); initLabelView(); } Lập trình Android – http://laptrinhdidong.vn Page 1 Trung tâm Tin học – ĐH KHTN public MyButton(Context context, AttributeSet attrs) { super(context, attrs); initLabelView(); } private final void initLabelView() { mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); mTextPaint.setTextSize(16); mTextPaint.setColor(0xFF000000); setPadding(15, 15, 15, 15); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStrokeWidth(4); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mShader = new SweepGradient(this.getMeasuredWidth()/2, this.getMeasuredHeight()/2, new int[] { Color.GREEN, Color.RED, Color.CYAN,Color.DKGRAY }, null); mPaint.setShader(mShader); } public void setText(String text) { mText = text; requestLayout(); invalidate(); } public void setTextSize(int size) { mTextPaint.setTextSize(size); requestLayout(); invalidate(); } public void setTextColor(int color) { mTextPaint.setColor(color); invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); } private int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { Lập trình Android – http://laptrinhdidong.vn Page 2 Trung tâm Tin học – ĐH KHTN result = (int) mTextPaint.measureText(mText) + getPaddingLeft() + getPaddingRight(); if (specMode == MeasureSpec.AT_MOST) { result = Math.min(result, specSize); } } return result; } private int measureHeight(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); mAscent = (int) mTextPaint.ascent(); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { result = (int) (-mAscent + mTextPaint.descent()) + getPaddingTop() + getPaddingBottom(); if (specMode == MeasureSpec.AT_MOST) { Log.v("Messure Height", "At most Height:"+specSize); result = Math.min(result, specSize); } } return result; } private void drawArcs(Canvas canvas, RectF oval, boolean useCenter, Paint paint) { canvas.drawArc(oval, mStart, mSweep, useCenter, paint); } @Override protected void onDraw(Canvas canvas) { mMatrix.setRotate(mRotate, this.getMeasuredWidth()/2, this.getMeasuredHeight()/2); mShader.setLocalMatrix(mMatrix); mRotate += 3; if (mRotate >= 360) { mRotate = 0; } RectF drawRect = new RectF(); drawRect.set(this.getWidth()- mTextPaint.measureText(mText), (this.getHeight()-mTextPaint.getTextSize())/2, mTextPaint.measureText(mText), this.getHeight()-(this.getHeight()- mTextPaint.getTextSize())/2); drawArcs(canvas, drawRect, false, mPaint); mSweep += SWEEP_INC; if (mSweep > 360) { Lập trình Android – http://laptrinhdidong.vn Page 3 Trung tâm Tin học – ĐH KHTN mSweep -= 360; mStart += START_INC; if (mStart >= 360) { mStart -= 360; } } if(mSweep >180){ canvas.drawText(mText, getPaddingLeft(), getPaddingTop() -mAscent, mTextPaint); } invalidate(); } } Và phần xử dụng Button các bạn vào file main.xml khai báo như sau: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button cua tui ne" /> <com.dac.ChinhButton.MyButton android:layout_height="wrap_content" android:id="@+id/mybutton1" android:layout_width="wrap_content"/> </LinearLayout> Và trong file ChinhButton.java các bạn viết code như sau: package com.dac.ChinhButton; import android.app.Activity; import android.os.Bundle; public class ChinhButton extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyButton myb = (MyButton)findViewById(R.id.mybutton1); myb.setText("Nobilomo_1990@yahoo.com"); myb.setTextSize(30); Lập trình Android – http://laptrinhdidong.vn Page 4 Trung tâm Tin học – ĐH KHTN } } Cuối cùng button của bạn có hình dáng như sau: Mọi ý kiến đóng góp các bạn vui lòng gữi bài viết về trang forum trang web www.laptrinhdidong.vn . Rất mong nhận được sự phản hồi của các bạn. Lập trình Android – http://laptrinhdidong.vn Page 5 . để tạo 1 button riêng đầy sống động Đầu tiên các bạn tạo 1 Project như sau: Project name: ChinhButton Build Target: Android 2.3.3 Application name: ChinhButton Package name: com.dac.ChinhButton Create. Activity: ChinhButton Bước tiếp theo, các bạn cần 1 class có extends Button để làm button riêng của bạn. Tạo class MyButton.java trong package chính và viết code như sau: package com.dac.ChinhButton; import. android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=" ;Button cua tui ne" /> <com.dac.ChinhButton.MyButton android:layout_height="wrap_content" android:id="@+id/mybutton1"