仿淘宝物流时间线的实现

物流时间线是根据物流状态改变而改变的一种动态效果。

贴张图:


下面看一下自定义的View:

第一步:

//初始化参数
private void init(AttributeSet attrs) {
    TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.timeline_style);
    mMarker = typedArray.getDrawable(R.styleable.timeline_style_tls_marker);
    mStartLine = typedArray.getDrawable(R.styleable.timeline_style_tls_line);
    mEndLine = typedArray.getDrawable(R.styleable.timeline_style_tls_line);
    mMarkerSize = typedArray.getDimensionPixelSize(R.styleable.timeline_style_tls_marker_size, 25);
    mLineSize = typedArray.getDimensionPixelSize(R.styleable.timeline_style_tls_line_size, 2);
    typedArray.recycle();

    if (mMarker == null) {
        mMarker = ContextCompat.getDrawable(mContext, R.drawable.timelinedefaultmarker);
    }
}
第二步:

重写onMeasure,计算视图宽高:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    //测量子控件的内部视图的宽度和高度
    int w = mMarkerSize + getPaddingLeft() + getPaddingRight();
    int h = mMarkerSize + getPaddingTop() + getPaddingBottom();

    //通过宽高来确定点的位置
    int widthSize = 0;
    int heightSize = 0;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
        widthSize = resolveSizeAndState(w, widthMeasureSpec, 0);
        heightSize = resolveSizeAndState(h, heightMeasureSpec, 0);
    }
    setMeasuredDimension(widthSize, heightSize);
    initDrawable();
}
initDrawable主要是初始化一下圆圈和线条,

private void initDrawable() {
    int pLeft = getPaddingLeft();
    int pRight = getPaddingRight();
    int pTop = getPaddingTop();
    int pBottom = getPaddingBottom();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值