Android自定义控件之仿汽车之家下拉刷新

本文详细介绍了如何在Android中实现仿汽车之家下拉刷新的动画效果,包括表盘动态旋转和释放刷新的动画。通过自定义View,结合背景图片和旋转动画,实现了下拉刷新的两个关键状态。示例代码和GitHub资源可供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
关于下拉刷新的实现原理我在上篇文章Android自定义控件之仿美团下拉刷新中已经详细介绍过了,这篇文章主要介绍表盘的动画实现原理

汽车之家的下拉刷新分为三个状态:
第一个状态为下拉刷新状态(pull to refresh),在这个状态下是一个表盘随着下拉的距离动态改变指针的角度
第二个状态为放开刷新状态(release to refresh),在这个状态下是指针角度变化的一个动画

第一个状态的实现:

这里写图片描述
这个效果我们使用自定义View来实现,我们从汽车之家apk中拿到下拉刷新所用到的两张图片:
这里写图片描述
这里写图片描述
我们将第一张图片画在画布上作为背景,接着我们根据当前进度值来动态旋转画布,然后再将第二章图片画在画布上,我们看到表针的旋转实则是画布在旋转。

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
            //现将第一张图片画在画布上
            canvas.drawBitmap(finalBackGroundBitmap,0,0,null);
            //旋转画布
            canvas.rotate(mCurrentProgress*2.7f,x/2,y/2);
            //将第二张图片画在旋转后的画布上
            canvas.drawBitmap(finalPointerBitmap, 0, 0, null);
    }

自定义View的完整代码如下:

/**
 * Created by zhangqi on 15/10/17.
 */
public class AutoHome extends View{
   
   
    private Bitmap backGroundBitmap;
    public Bitmap pointerBitmap;
    private int x;
    private int y;
    private Bitmap finalBackGroundBitmap;
    private Bitmap finalPointerBitmap;
    private float mCurrentProgress;

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


    public AutoHome(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public AutoHome(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }


    private void init(Context context) {
        backGroundBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(contex
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值