Intereting Posts
Android – поставщик файлов – отказ в разрешении Android Webkit: Абсолютно позиционированные элементы не уважают z-index Есть ли способ показать предварительный просмотр содержимого RecyclerView в редакторе Android Studio? Фрагмент обновления ViewPager для салфетки Что такое SecDownloader Как получить размер виджета приложения? RecyclerView onCreateViewHolder вызывал чрезмерно при быстрой прокрутке с помощью DPAD Android RecyclerView с GridLayoutManager делает диапазон элементов несколькими рядами Заменить селекторные изображения программно Как уведомить веб-браузер Dolphin, когда он удаляется? Как получить текущий buildType в конфигурации Android Gradle Можно ли прочитать историю затрат на звонки из диалога, поднятого после окончания предоплаченного вызова? Как отправлять динамические сообщения (или в цикле) в OKHTTP 3.x в android? ProgressBar.setProgressDrawable не работает для Android 2.3 Android Studio – Где я могу увидеть столбец при отладке приложения для Android?

Вопрос о анимации в Android Gauge

Хорошо, поэтому я пытался сделать это в течение нескольких дней, и я ничего не получаю. Итак, у меня есть следующие два изображения:

Первый – это RPM-датчик

Калибр RPM

Второе изображение представляет собой полную белую графику, представляющую полный параметр rpm:

Полная калибровка

Я хочу сделать следующее:

  1. Попросите пользователя ввести RPM, если, например, они вводятся в 1,2, датчик будет заполняться следующим образом:

вывод

Мне нужна работа с пользователем, мне нужна помощь в анимации. Вот что я пробовал:

  1. Я попытался использовать PorterDuff, но он также закрепил датчик на заднем плане не только белой полосой
  2. Я пробовал разбивать изображение на маленькие растровые изображения и хранить их в массивах, чтобы я мог вспоминать детали, но это было медленным и часто разбивались
  3. Я сделал некоторый прогресс, применив калибровку сначала к холсту, а затем сохранил холст: canvas.save (); Затем обрезание пути на белом изображении, а затем восстановление холста. Тем не менее, я не знаю, как клипа круговым способом, начиная с нижнего левого угла до 180 градусов вниз вправо (CW). Это лучший способ?

Я знаю, что есть, вероятно, более простой или эффективный способ сделать это, я просто не знаю. Кто-нибудь с хорошими идеями?

* Обратите внимание, что все изображения являются PNG

Заранее спасибо!

Solutions Collecting From Web of "Вопрос о анимации в Android Gauge"

Как вы уже нашли, я бы использовал клип:

  • Рисовать фоновое изображение
  • Установить клип
  • Рисовать изображение переднего плана

я хотел бы использовать

Canvas.clipPath() 

С дорожкой, похожей на кусочек пирога, начинающейся в центре круга, вот так:

Путь клипа

Чтобы создать клип, используйте что-то вроде:

 public class PieView extends View { private int width = 200; private int angleStart = 135; private int sweep = 270; private Path p; private Paint paint = new Paint(); public PieView(Context context, AttributeSet attrs) { super(context, attrs); p = new Path(); //move into center of the circle p.setLastPoint(width/2, width/2); //add line from the center to arc at specified angle p.lineTo(width/2+(float)Math.cos(Math.toRadians(angleStart))*(width/2), width/2+(float)Math.sin(Math.toRadians(angleStart))*(width/2)); //add arc from start angle with specified sweep p.addArc(new RectF(0, 0, width, width), angleStart, sweep); //from end of arc return to the center of circle p.lineTo(width/2, width/2); paint.setColor(Color.RED); paint.setStrokeWidth(1); paint.setStyle(Style.STROKE); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(0,0,width,width, paint); canvas.drawPath(p,paint); } } 

Вот как рисовать дуги, начиная с Android ApiDemos: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Arcs.html

Затем вам нужно использовать xfermode, чтобы удалить часть верхнего изображения, используя холст, полученный из растрового изображения. Вы можете увидеть один из примеров этого подхода: Сделать определенную область растрового изображения прозрачной на ощупь