Android自定义时间轴

今天来分享一下时间轴,最近看很多App里面都很常见,水平一般,所以仿了一个。
先上张图片:
这里写图片描述

代码:
MainActivity:

public class MainActivity extends AppCompatActivity {
   

    private MyView myView;
    private View activity_main;
    private View top;
    private View bottom;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //通过LayoutInflater动态加载布局,主要取到activity_main,这个布局,然后通过setContentView进行设置,为什么不直接设置setContentView(R.layout.activity_main);
        //因为在onResume之前都无法得到View测量的结果,width和heigh都是0,所以通过addOnGlobalLayoutListener进行回掉(当onMeasure,onLayot执行完毕会回掉,才能拿到宽高)
        LayoutInflater layoutInflater = LayoutInflater.from(this);
        activity_main = layoutInflater.inflate(R.layout.activity_main, null);
        //得到自定义View
        myView = (MyView) activity_main.findViewById(R.id.myView);
        //分别得到两段文字的TextView
        top = activity_main.findViewById(R.id.top);
        bottom = activity_main.findViewById(R.id.bottom);
        setContentView(activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
        //activity_main布局全部构建完毕会回调
        ViewTreeObserver Observer = activity_main.getViewTreeObserver();
        Observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //移除监听
                activity_main.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                //设置文本
                myView.setText(new String[]{
  "下","中","上"});
                //分别设置两段文字的高
                myView.setViewHeight(new int[]{bottom.getTop(),top.getTop()+200,top.getTop()});
                //强制View重绘
                myView.mInvalidate();
                myView.setRadius(36);
            }
        });
    }
}

自定义View:

public class MyView extends View {
   
    //绘制圆的半径
    private int radius;
    //每段文字的高(决定着小球的高)
    private int[] viewHeight;
    //小圆球上面的文本
    private String[] text;

    private Paint p;
    private Rect mBounds;

    public MyView(Context context) {
        super(context);
        init();
    }

    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        //初始化画笔
        p = new Paint();
        p.setColor(Color.RED);
        p.setAntiAlias(true);
        mBounds = new Rect();
    }

    @Override
    protected void onMeasure(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值