Анимированная пунктирная граница в Android

Как вы создаете анимированную пунктирную или пунктирную границу произвольной формы в Android? В XML (желательно) или программно.

Для примера см. рисунок ниже.

alt text

Ответы

Ответ 1

Вы видели демо-версию PathEffects API? http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html

Он создает точно анимированную строку, и вы можете просто настроить путь к краю вашего представления, чтобы создать границу. Например:

Определите путь по вашим параметрам вида/произвольной форме:

Path path = new Path();
path.addRect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom(), Path.Direction.CW);

Затем создайте пунктирный PathEffect с помощью:

PathEffect pe = new DashPathEffect(new float[] {10, 5, 5, 5}, phase);

Затем установите ассоциированный элемент с объектом Paint и рисуем:

mPaint.setPathEffect(pe);
canvas.drawPath(path, mPaint);

EDIT: анимированный эффект происходит от постоянного изменения фазы и перерисовки. В демо-версии API он вызывает invalidate() в методе onDraw() (который вызывает onDraw()...)

Ответ 2

XML... Я думаю, это невозможно. Но вы можете использовать пользовательский вид или SurfaceView и обрабатывать чертеж самостоятельно. Получайте удовольствие от этого:)

Ответ 3

Не могли бы вы использовать одну форму из двух изображений 9patch в качестве фоновой рамки вокруг файла изображения, который вы хотите представить, по одному в каждом из двух макетов. Изображения будут отличаться с точки зрения размещения пунктирных элементов. Быстрое изменение взглядов (возможно, потребуется задержка), и вы можете получить необходимый эффект. Не знаю, насколько эффективно это было бы, если бы можно было позволить пользователю продолжать использовать приложение и жевать батарею...