分类 android 下的文章

阿里热修复Sophix的基本使用

什么是热修复?就是指能够修复软件漏洞的一些代码,是一种快速、低成本修复产品软件版本缺陷的方式(百度)。也就是当产品上线遇到bug,这个时候我们去发布一个新的版本,不但要过市场审核,而且发布没有多久又更新,用户体验也不好。这个时候我们就要考虑到使用热修复了,在app启动的时候会去联网下载差分包然后进行修复。
本文主要是介绍阿里的热修复Sophix的基本使用流程。Sophix提供了一套更加完美的客户端服务端一体的热更新方案,做到了图形界面一键打包、加密传输、签名校验和服务端控制发布与灰度功能,让你用最少的时间实现最强大可靠的全方位热更新。

- 阅读剩余部分 -

PorterDuffXfermode的用法

Android.graphics.Paint

public Xfermode setXfermode (Xfermode xfermode)
Set or clear the xfermode object. Pass null to clear any previous xfermode.
As a convenience, the parameter passed is also returned.

设置两张图片相交时的模式。
在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;如果它是部分透明的,那么它将会被染上下面的颜色。
而setXfermode就可以来解决这个问题 .

Canvas canvas = new Canvas(dstBitmap);  
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));    
canvas.drawBitmap(srcBitmap, 0f, 0f, paint);  

canvas原有的图片可以理解为背景,就是dst;
新画上去的图片可以理解为前景,就是src。

EE05B252-EFFC-4F14-A4FD-59BC9E58A55D.png

android红包抖动动画

发完红包,红包抖动效果

效果图

public static ObjectAnimator shake(View view) {
        return tada(view, 1f);
    }

    public static ObjectAnimator shake(View view, float shakeFactor) {

        PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofKeyframe(View.SCALE_X,
                Keyframe.ofFloat(0f, 1f),
                Keyframe.ofFloat(.1f, .9f),
                Keyframe.ofFloat(.2f, .9f),
                Keyframe.ofFloat(.3f, 1.1f),
                Keyframe.ofFloat(.4f, 1.1f),
                Keyframe.ofFloat(.5f, 1.1f),
                Keyframe.ofFloat(.6f, 1.1f),
                Keyframe.ofFloat(.7f, 1.1f),
                Keyframe.ofFloat(.8f, 1.1f),
                Keyframe.ofFloat(.9f, 1.1f),
                Keyframe.ofFloat(1f, 1f)
        );

        PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofKeyframe(View.SCALE_Y,
                Keyframe.ofFloat(0f, 1f),
                Keyframe.ofFloat(.1f, .9f),
                Keyframe.ofFloat(.2f, .9f),
                Keyframe.ofFloat(.3f, 1.1f),
                Keyframe.ofFloat(.4f, 1.1f),
                Keyframe.ofFloat(.5f, 1.1f),
                Keyframe.ofFloat(.6f, 1.1f),
                Keyframe.ofFloat(.7f, 1.1f),
                Keyframe.ofFloat(.8f, 1.1f),
                Keyframe.ofFloat(.9f, 1.1f),
                Keyframe.ofFloat(1f, 1f)
        );

        PropertyValuesHolder pvhRotate = PropertyValuesHolder.ofKeyframe(View.ROTATION,
                Keyframe.ofFloat(0f, 0f),
                Keyframe.ofFloat(.1f, -3f * shakeFactor),
                Keyframe.ofFloat(.2f, -3f * shakeFactor),
                Keyframe.ofFloat(.3f, 3f * shakeFactor),
                Keyframe.ofFloat(.4f, -3f * shakeFactor),
                Keyframe.ofFloat(.5f, 3f * shakeFactor),
                Keyframe.ofFloat(.6f, -3f * shakeFactor),
                Keyframe.ofFloat(.7f, 3f * shakeFactor),
                Keyframe.ofFloat(.8f, -3f * shakeFactor),
                Keyframe.ofFloat(.9f, 3f * shakeFactor),
                Keyframe.ofFloat(1f, 0)
        );

        return ObjectAnimator.ofPropertyValuesHolder(view, pvhScaleX, pvhScaleY, pvhRotate).
                setDuration(1000);
    }

使用

   /**
     * 红包抖动
     *
     * @param targetView
     */
    private void shakeRedPacket(View targetView) {

        ObjectAnimator animator = AnimatorUtils.shake(targetView);
        animator.setRepeatCount(5);
        animator.start();
    }

参考资料:
https://plus.google.com/+CyrilMottier/posts/FABaJhRMCuy

How use tools:overrideLibrary in a build.gradle

引用了一个同包名的library,编译时报错

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [com.alipay.euler:andfix:0.5.0] /Users/apple/Documents/GitHub/AndFixDemo/app/build/intermediates/exploded-aar/com.alipay.euler/andfix/0.5.0/AndroidManifest.xml
      Suggestion: use tools:overrideLibrary="com.alipay.euler.andfix" to force usage

- 阅读剩余部分 -