组合View(实现梯形布局,可以增加元素和删除元素)

 技术选型
1.组合View;
2.自定义ViewGroup;
3.接口回调;

例图:


1.实现如图1视图效果,包括一个头部布局和一个梯形布局;
2.通过组合控件的方式实现头部布局
        1)左侧减号,右侧加号,中间显示梯形布局添加的子控件的数量
        2)对外提供统一的点击事件监听,不能在外部拿到控件id的方式实现
        3)点击加号时中间文字数据数量加1,点击减号时,数据数量减1,当数量为0时,点击减号不再继续往下减
3.继承ViewGroup实现梯形布局
        1)实现梯形布局,可以增加元素和删除元素;
        2)添加子控件时,一开始添加的控件的左上角位置在上一个控件的右下角的位置;
        3)当子控件的宽度要超出屏幕宽度时,则此控件向下平移,之后添加的控件向左下方向移动,控件的右上角在上一个控件的左下角位置;
        4)当超出屏幕左侧时,则重置添加View的方向;
        5)对外提供添加控件和删除控件的方法,如果已经没有子控件,不再删除;
        6)可以不考虑超出屏幕高度的情况;
4.点击头布局加号时,调用梯形布局的添加条目方法,在下方的梯形布局添加一条条目,点击减号时,调用梯形布局的删除条目方法,将梯形布局的最后一个条目删除,当数量为0时,不再删除;


activity_main布局文件:

<?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"
    android:orientation="vertical"
    tools:context="com.example.admin.weekexam.MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/minus_but"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-"
            android:layout_weight="0.5"/>
        <TextView
            android:id="@+id/control"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="x条数据"
            android:textAlignment="center"
            android:layout_weight="9"/>
        <Button
            android:id="@+id/add_but"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="+"
            android:layout_weight="0.5"/>
    </LinearLayout>
    <LinearLayout
        android:id="@+id/controllayout"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </LinearLayout>

</LinearLayout>
MainActivity文件:
public class MainActivity extends AppCompatActivity {

    private Button minus_but;
    private TextView control;
    private Button add_but;
    private int sum=0;
    private WindowManager mWindowManager;
    private DisplayMetrics mDisplayMetrics;
    private String controltext = "";
    private LinearLayout mLinearLayout;
    private int sumwidth=0;
    private LinearLayout.LayoutParams mLayoutParams;
    private int num = 0;
    private boolean flag=false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initview();
        add_but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sum++;
                if (flag){
                    sumwidth-=160;
                    if (sum%4==0){
                        flag=false;
                    }
                }else {
                    sumwidth+=160;
                    if (sum%4==0){
                        flag=true;
                    }
                }
                shujujiajian();
                addcontrol();
            }
        });
        minus_but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (sum<=0){
                    sumwidth=0;
                    Toast.makeText(MainActivity.this,"没有数据可以删除了",Toast.LENGTH_SHORT).show();
                }else {
                    sum--;
                    if (sum>4){
                        sumwidth+=160;
                    }
                    shujujiajian();
                    mLinearLayout.removeViewAt(sum);
                }
            }
        });
    }

    private void addcontrol() {
        TextView textView = new TextView(MainActivity.this);
        textView.setText(""+sum+"条数据");
        textView.setWidth(160);
        textView.setHeight(60);
        textView.setId(sum);
        mLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        mLayoutParams.setMargins(sumwidth,0,0,0);
        textView.setLayoutParams(mLayoutParams);
        mLinearLayout.addView(textView);
    }

    private void shujujiajian() {
        control.setText("");
        control.setText(sum+controltext);
    }

    private void initview() {
        minus_but = (Button) findViewById(R.id.minus_but);
        control = (TextView) findViewById(R.id.control);
        add_but = (Button) findViewById(R.id.add_but);
        mLinearLayout = (LinearLayout) findViewById(R.id.controllayout);
    }

}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值