技术选型
1.组合View;
2.自定义ViewGroup;
3.接口回调;
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时,不再删除;
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); } }
7738

被折叠的 条评论
为什么被折叠?



