欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android之自定义Button控件

程序员文章站 2022-06-07 13:22:23
...

1、首先我们创一个Java类,自己命名,然后在里面进行相关的设计

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);  
  
    }  
2、设置画布的宽和高

只用重写onMeasure这个方法,然后设置它的宽高就可以控制这个控件了

 @Override  
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
        //设置画布的宽和高  
        setMeasuredDimension(450,450);  
    }  

3、然后在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中来设置监听检验

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