android录制视频计时,Android实现微信录制小视频的计时动画

使用微信录制小视频时会有一个倒计时的横线,如下图:

0818b9ca8b590ca3270a3433284dd417.png

这个横线怎么实现呢?

尝试了以下几种方法:

ProgressBar

自定义View + 定时器 + 重绘

TextView动态改变宽度

第一种方式使用ProgressBar,但是暂时不知道如何实现.

第二种方式在绘制过程中出现卡顿,没有更好的解决办法,相对较麻烦.

第三种方式定时器动态改变宽度仍旧会出现卡顿现象.

卡顿! 卡顿!! 卡顿!!!

用什么解决卡顿呢?

用动画,对了,使用Animator.动画来解决卡顿,动态改变View的宽度.

于是自定义了一个LineView

public class LineView extends View{

public LineView(Context context) {

super(context);

}

public LineView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public void setLayoutWidth(int width){

ViewGroup.LayoutParams params = getLayoutParams();

params.width = width;

setLayoutParams(params);

}

}

和普通的view相比,就多了一个方法:

public void setLayoutWidth(int width){

ViewGroup.LayoutParams params = getLayoutParams();

params.width = width;

setLayoutParams(params);

}

为什么加一个这个方法呢?这个方法的其实就是设置View的布局宽度,但是在ObjectAnimator里面,需要一个可以使用的属性来改变,为此我创造一个属性layoutWidth,于是动画就可以这样写:

animator = ObjectAnimator.ofInt(lineView, "layoutWidth", width, 0);

布局文件很简单,就放一个LineView,一个Button.

在这把MainActivity也贴出来,如下:

public class MainActivity extends AppCompatActivity {

private Animator animator;

private LineView lineView;

private int width;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button button = (Button) findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

startAnimator();

}

});

lineView = (LineView) findViewById(R.id.lineView);

ViewTreeObserver observer = lineView.getViewTreeObserver();

observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

@Override

public boolean onPreDraw() {

width = lineView.getMeasuredWidth();

Log.d("-----", "width:" + width);

return true;

}

});

}

private void startAnimator(){

animator = ObjectAnimator.ofInt(lineView, "layoutWidth", width, 0);

animator.setDuration(6000);

animator.setInterpolator(new LinearInterpolator());

animator.start();

}

}

噔噔噔噔,大功告成,看一下效果吧:

0818b9ca8b590ca3270a3433284dd417.png

如果有好的方法,请留言或者联系我哦.点此查看联系方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值