gif跟随ProgressBar一起动/pk进度条gif特效

本文介绍了一个自定义的GifView组件,用于在直播PK场景中展示进度条上的动画效果。通过继承View并结合ProgressBar,利用Movie类加载gif资源,实现了根据进度条移动同步动画的效果。详细讲解了代码实现过程,并提供了布局和主要活动的代码示例。
摘要由CSDN通过智能技术生成

最近要做个小功能,现在市面上面的直播平台,像虎牙、斗鱼、抖音和快手等等,两个主播PK的时候进度条上面会有一个动画一直在重复,挺好看的,直接上图。

pk

简单说下思路,因为ProgressBar已经基本够使用了,所以就懒得重写个自定义ProgressBar,因为现在做的是分开的两个view,到时候想替换的话,会方便很多。

整体思路是ProgressBar因为是均分的进度条,会根据始末位置算百分比,我们同样可以根据进度条移动的距离,算出控件需要对应移动的距离。举个栗子:
进度条的最小单位 / 进度条的范围 = 移动的最小距离 / 总的距离(也就是控件的总宽度)

下面开始上代码:这个是播放gif写的自定义view

package com.cgg.pkprogress;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;

public class GifView extends View {
   


    //gif图片资源ID
    protected int progress_gif;
    protected int progress_width;

    //gif动态效果总时长,在未设置时长时默认为1秒
    private static final int DEFAULT_MOVIE_DURATION = 1000;
    //Movie实例,用来显示gift图片
    private Movie mMovie;
    //显示gift图片的动态效果的开始时间
    private long mMovieStart;
    //动态图当前显示第几帧
    private int mCurrentAnimationTime = 0;
    //图片离屏幕左边的距离
    private float mLeft;
    //图片离屏幕上边的距离
    private float mTop;
    //图片的缩放比例
    private float mScale;
    //图片在屏幕上显示的宽度
    private int mMeasuredMovieWidth;
    //图片在屏幕上显示的高度
    private int mMeasuredMovieHeight;
    //是否显示动画,为true表示显示,false表示不显示
    private boolean mVisible = true;
    //动画效果是否被暂停
    private volatile boolean mPaused = false;

    public GifView(Context context, AttributeSet attrs) {
   
        this(context, attrs, 0);
    }

    public GifView(Context context, AttributeSet attrs, int defStyle) {
   
        super(context, attrs, defStyle);
        obtainStyledAttributes(attrs);
    }

    private void obtainStyledAttributes(AttributeSet attrs) {
   
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
   
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
        // 获取自定义属性
        final TypedArray attributes = getContext().obtainStyledAttributes(attrs, R.styleable.GifProgressBar);
        progress_gif = attributes.getResourceId(R.styleable.GifProgressBar_progress_gif, -1);
        progress_width = (int
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值