自定义组件

来源:互联网 发布:360秒收录网站源码 编辑:程序博客网 时间:2024/05/29 21:18
<?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"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    >    <com.example.zidy1101.AddDeleteView        android:id="@+id/ad"        android:layout_width="match_parent"        android:layout_height="wrap_content"        app:left_txt="加"        app:right_txt="减"        app:middle_txt="3"        />    <com.example.zidy1101.Huatu        android:background="#00ff00"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>
//Maincitiy
package com.example.zidy1101;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;//组合控件使用public class MainActivity extends AppCompatActivity{    AddDeleteView adv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        adv = (AddDeleteView) findViewById(R.id.ad);        //减号控件        //TextView  txtDelete=(TextView) adv.findViewById(R.id.txt_delete);         adv.setOnAddDelClickListener(new AddDeleteView.OnAddDelClickListener() {             @Override             public void onAddClick(View v) {                 int origin=adv.getNumber();                 origin++;                 adv.setNumber(origin);             }             @Override             public void onDelClick(View v) {                 int origin=adv.getNumber();                 origin--;                 adv.setNumber(origin);             }         });    }}

//组合
package com.example.zidy1101;import android.content.Context;import android.content.res.TypedArray;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;public class AddDeleteView extends LinearLayout{    private OnAddDelClickListener Listener;    private EditText etNumber;    //对外提供一个点击的回调接口    interface OnAddDelClickListener{        void onAddClick(View v);        void onDelClick(View v);    }    //对象       public void setOnAddDelClickListener(OnAddDelClickListener Listener){           if (Listener!=null){               this.Listener=Listener;           }       }    public AddDeleteView(Context context) {        this(context,null);    }    public AddDeleteView(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public AddDeleteView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initView(context, attrs, defStyleAttr);//方法    }    //方法    private void initView(Context context, AttributeSet attrs, int defStyleAttr) {        View v = View.inflate(context, R.layout.delete, this);        TextView txtDelete = (TextView) findViewById(R.id.txt_delete);        TextView txtAdd = (TextView) findViewById(R.id.txt_add);         etNumber=(EditText) findViewById(R.id.et_number);        //自定义View        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AddDeleteViewStyle);        String left = typedArray.getString(R.styleable.AddDeleteViewStyle_left_txt);        String right = typedArray.getString(R.styleable.AddDeleteViewStyle_right_txt);        String middle = typedArray.getString(R.styleable.AddDeleteViewStyle_middle_txt);        txtDelete.setText(left);        txtAdd.setText(right);        etNumber.setText(middle);        //释放        typedArray.recycle();        //接口中实现的两个方法        txtDelete.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Listener.onDelClick(v);            }        });        txtAdd.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Listener.onAddClick(v);            }        });    }    //对外提供设置EditText值得方法    public void setNumber(int number){         if (number>0){             etNumber.setText(number+"");         }    }    public int getNumber(){        int number=0;        try {            String trim = etNumber.getText().toString().trim();             number = Integer.valueOf(trim);        }catch (Exception e){            number=0;        }      return number;    }    //第四个有个错误   是版本错误  是21几以上的不会报错}

//画图
package com.example.zidy1101;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;public class Huatu extends View{    public Huatu(Context context) {        super(context);    }    public Huatu(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);    }    public Huatu(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    //重要方法    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);//画出来的线是连续的        paint.setColor(Color.RED);//颜色        paint.setFakeBoldText(true);//粗细        //需要范围  画圆        canvas.drawCircle(50,50,50,paint);    }    //Measure测量    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        int widthMode=MeasureSpec.getMode(widthMeasureSpec);        int widthSize=MeasureSpec.getSize(widthMeasureSpec);        int heightMode=MeasureSpec.getMode(heightMeasureSpec);        int heightSize=MeasureSpec.getSize(heightMeasureSpec);    }}