实现要求:
1)自定义ViewGroup的方式完成如图一三色梯页面效果,第一条红色,第二条绿色,第三条蓝色,依次循环,台阶上显示第几条台阶数,每台阶梯子占控件宽度的1/3,垂直方向依次向下添加
2)为自定义三色梯提供添加和删除的方法,条目提供长按和点击事件
3)当点击标题栏右上方的添加按钮时,新的台阶添加到三色梯的下方,并显示添加的条数
4)长按三色梯的条目,可以删除选中条目
5)当点击添加的时候,使用属性动画,将内容平移到三色梯的条目上
布局:因为代码可能审核时会被删除所以看看布局效果
自定义view类继承viewgroup
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
public class LadderView extends ViewGroup {
public LadderView (Context context) {
this(context,null);
}
public LadderView (Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public LadderView (Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec,heightMeasureSpec);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int count = getChildCount();
int startWidth = 0;
int startHeight = 0;
for (int i=0; i<count; i++){
View v = getChildAt(i);
v.layout(startWidth,startHeight,startWidth+v.getMeasuredWidth(),startHeight+v.getMeasuredHeight());
if ((i+1)%3==0) {
startWidth=0;
}else {
startWidth += v.getMeasuredWidth();
}
startHeight += v.getMeasuredHeight();
}
}
}
Actvity主界面实现主要功能模块,这里我用的是fragment实现的
import android.content.DialogInterface;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.bwie.newsmoth05.MainActivity;
import com.bwie.newsmoth05.R;
import com.bwie.newsmoth05.view.LadderView;
public class LadderFragment extends Fragment implements View.OnClickListener {
private Button btn_delete;
private Button btn_add;
private LadderView myView;
int i=0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_ladder, container, false);
initView(view);
return view;
}
private void initView(View view) {
btn_delete = (Button) view.findViewById(R.id.btn_delete);
btn_add = (Button) view.findViewById(R.id.btn_add);
myView = (LadderView) view.findViewById(R.id.myView);
btn_delete.setOnClickListener(this);
btn_add.setOnClickListener(this);
}
@Override
public void onClick(View v) {
i++;
final TextView text= new TextView(getContext());
text.setWidth(250);
text.setHeight(100);
text.setText(" 条目"+i);
text.setTextColor(Color.WHITE);//字体颜色白色
if((i+1)%3==0){
text.setBackgroundColor(Color.GREEN);//背景颜色绿色2
}else if ((i+1)%3==1){
text.setBackgroundColor(Color.BLUE);//背景颜色蓝色3
}else if ((i+1)%3==2){
text.setBackgroundColor(Color.RED);//背景颜色红色1
}
myView.addView(text);
/**
* 长按删除选中条目
*/
text.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//对话框
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("删除条目");
builder.setMessage("请确认是否要删除选中的条目");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
myView.removeView(text);
}
});
builder.setNegativeButton("取消",null);
AlertDialog alertDialog = builder.create();
alertDialog.show();
return true;
}
});
/**
* 左上角点击删除
*/
btn_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myView.removeView(text);
}
});
/**
* 点击条目跳转新的页面
*/
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "你点击了我", Toast.LENGTH_SHORT).show();
}
});
}
}