1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình Android: Tạo button riêng potx

5 403 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 77,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tạo button riêngBạ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

Trang 1

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();

}

Trang 2

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 {

Trang 3

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) {

Trang 4

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);

Trang 5

}

}

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.

Ngày đăng: 08/08/2014, 06:22

TỪ KHÓA LIÊN QUAN

w