1. 程式人生 > >組合自定義控制元件,介面回撥實現T

組合自定義控制元件,介面回撥實現T

效果圖: 在這裡插入圖片描述 1.自定義佈局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center">

    <ImageView
        android:id="@+id/sub"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/goods_sub_btn"/>

    <TextView
        android:id="@+id/textsum"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:text="1"
        android:gravity="center"
        android:textSize="20sp"
        android:textColor="#000"/>

    <ImageView
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/goods_add_btn"/>
</LinearLayout>

自定義程式碼:

public class Group extends FrameLayout implements View.OnClickListener{

    private TextView mTextsum;
    private int value = 1;
    private ImageView mSub;
    private ImageView mAdd;

    public Group(Context context) {
        this(context,null);
    }

    public Group( Context context,  AttributeSet attrs) {
        this(context, attrs,0);
    }

    public Group( Context context,  AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        //初始化
        initView(context);

    }

    private void initView(Context context) {
        //改成this,方便我們初始化物件,??
        View inflate = View.inflate(context, R.layout.item_group, this);
        mSub = inflate.findViewById(R.id.sub);
        mTextsum = inflate.findViewById(R.id.textsum);
        mAdd = inflate.findViewById(R.id.add);

        //獲取值
        int textValue = getValue();
        //設定值
        setValue(textValue);

        //設定監聽事件
        mSub.setOnClickListener(this);
        mAdd.setOnClickListener(this);

    }

    //設定值
    private void setValue(int textValue) {
        mTextsum.setText(textValue + "");
    }

    //獲取值
    private int getValue() {

        String trim = mTextsum.getText().toString().trim();
        //判斷非空
        if(!TextUtils.isEmpty(trim)){
            //轉成int
            value = Integer.valueOf(trim);
        }
        return value;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            //-
           case R.id.sub:
               subNumber();

               break;
               //+
            case R.id.add:

                addNumber();

                break;
        }
    }

    //最大值和最小值
    private int MAX = 5 ;
    private int MIN = 1 ;

    //設定最大值
    public void setMax (int Max){
        MAX = Max ;
    }

    //設定最小值
    public void setMin(int min){
        MIN = min ;
    }

    //+
    private void addNumber() {

        if(value < MAX){
            value ++ ;
        }
        setValue(value);
        //往介面的方法中儲存值
        mOnNumberChangeListener.onNumberChange(value);

    }

    //-
    private void subNumber() {
        if(value > MIN){
            value-- ;
        }
        setValue(value);

        mOnNumberChangeListener.onNumberChange(value);
    }



    //定義介面
    public interface OnNumberChangeListener {
        public void onNumberChange(int value);
    }

    //宣告介面
    private OnNumberChangeListener mOnNumberChangeListener ;

    //設定接收外界傳來的物件方法
    public void setOnNumberChangeListener (OnNumberChangeListener onNumberChangeListener){
        mOnNumberChangeListener = onNumberChangeListener ;
    }

}

MainActivity程式碼

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找控制元件
        Group group = findViewById(R.id.gp);
        //設定最大的值
        group.setMax(20);
        //設定最小
        group.setMin(-2);
        //介面
        group.setOnNumberChangeListener(new Group.OnNumberChangeListener() {
            @Override
            public void onNumberChange(int value) {
                Toast.makeText(MainActivity.this, ""+value, Toast.LENGTH_SHORT).show();
            }
        });


    }
}