Как добиться эффекта размытия в движении, подобного этому?
Smartisan OS имеет приложение погоды с таким эффектом: при изменении формата с Цельсия на Фаренгейт число температуры будет прокручиваться так: Пример эффекта размытия в движении
Я думаю, что это не простой эффект размытия при прокрутке чисел, потому что из изображения видно, что эти числа размыты только в вертикальном направлении. Цифры прокручиваются сначала с низкой скоростью, а затем быстрее. И радиус размытия также больше при прокрутке. Как по мне, такого эффекта добиться не так просто.
2 ответа
Просто создайте собственный вид, который всегда будет рисоваться на холсте. Вы должны самостоятельно управлять движением вверх и вниз, в этом случае вы не сможете использовать простые встроенные элементы пользовательского интерфейса. Как только вы захотите получить эффект прокрутки, просто нарисуйте движущийся текст несколько раз, но каждый раз слегка смещайте его и изменяйте его непрозрачность, в зависимости от его скорости.
В этом случае использование OpenGL может быть излишним, так как в данном случае речь идет только о тексте. Размытие в движении было бы слишком сложным, а производительность - тяжелой для реализации, а рисование текста на холсте в десятки раз оказало лишь незначительное влияние на производительность.
Надеюсь, я смогу помочь.
То же решение @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;
}