一、前言
相信大家在我之前的博客看到过自定义ListView,那么我们今天就来玩玩自定义Button,代码部分实现很简单,基本的原理,我会在注释上面标明,所以,在这里,我就重复说明了。那么现在就开始学习吧!
二、代码实现
1、首先我们创一个java类,自己命名,我这里就直接是MyButton了,然后在里面进行相关的设计
package com.zking.laci.android16_diyui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
/**
* Created by Laci on 2017/7/8.
*/
public class MyButton extends View {
public MyButton(Context context) {
super(context);
}
public MyButton(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//设置背景颜色
canvas.drawColor(Color.GRAY);
//实例化路径
Path path=new Path();
path.moveTo(100,100);
path.lineTo(100,400);
path.lineTo(400,400);
path.lineTo(100,100);
//实例化一个画笔
Paint paint=new Paint();
paint.setColor(Color.RED);
//设置空心
paint.setStyle(Paint.Style.STROKE);
//设置画笔的粗细
paint.setStrokeWidth(12);
//画路径
canvas.drawPath(path,paint);
//设置画笔的粗细
paint.setStrokeWidth(3);
paint.setColor(Color.BLACK);
//设置字体的大小
paint.setTextSize(50);
//画文字
canvas.drawText("按钮",150,350,paint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//设置画布的宽和高
setMeasuredDimension(450,450);
}
}
2、然后在xml文件使用我们自己写的Button
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zking.laci.android16_diyui.MainActivity"
android:orientation="vertical"
>
<com.zking.laci.android16_diyui.MyButton
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mybtn_main"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
3、最后在相对应的Activity中来设置监听检验
package com.zking.laci.android16_diyui;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private MyButton myButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得该ID的控件
myButton = (MyButton) findViewById(R.id.mybtn_main);
//给该控件设置监听
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
}
});
}
}
写到这一步也就结束了,是不是觉得很简单呢,不止可以自定义Button,还可以自定义其他的控件,大家可以试试哟!