三色梯

在这里插入图片描述
实现要求:
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();
        }
    });
}

}

猜你喜欢

转载自blog.csdn.net/weixin_43117800/article/details/84672392