如何实现这样的运动模糊效果?

时间:2017-07-15 09:06:28

标签: java android opengl-es blur motion-blur

Smartisan操作系统有一个具有这种效果的天气应用程序:当将格式从摄氏度更改为华氏度时,温度数将按如下方式滚动: Motion blur effect sample

我认为当数字滚动时,它不是简单的模糊效果,因为您可以从图像中看到这些数字仅在垂直方向上模糊。数字首先以低速滚动,然后更快。滚动时模糊半径也更长。至于我,这种效果并不那么容易实现。

2 个答案:

答案 0 :(得分:1)

只需创建一个始终在画布上绘制的自定义视图。你必须自己处理上下运动,在这种情况下你将无法使用简单的内置ui元素。一旦你想要滚动效果,只需多次绘制移动文本,但每次稍微偏移它并改变它的不透明度,具体取决于它的速度。

在这种情况下使用OpenGL可能是一种矫枉过正,因为这种情况只是文本。运动模糊太难了,实现性能很重,并且将文本绘制到画布十几次只会对性能产生轻微影响。

希望我能提供帮助。

答案 1 :(得分:1)

@andras的相同解决方案

 /**
 * use for 2D-Radial-Blur
 *
 * @param src
 * @param dx    It effetcs the speed. you can use 1/-1 for a test
 * @param dy    It effetcs the speed. you can use 1/-1 for a test
 * @param times effects motion length
 * @return
 */
public static Bitmap doRadialBlur(Bitmap src, int dx, int dy, int times) {

    Bitmap dst = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(dst);
    Matrix matrix = new Matrix();
    Paint paint = new Paint();
    canvas.drawBitmap(src, matrix, paint);

    paint.setAlpha(51); // 51 / 255 =20%

    for (int i = 0; i < times; i++) {
        matrix.setTranslate(i * dx, i * dy);
        canvas.drawBitmap(src, matrix, paint);
    }

    return dst;
}

https://github.com/dkmeteor/RadialBlur-Android