#android #android-layout #android-canvas
Вопрос:
Я просмотрел эту замечательную библиотеку спидометров, где они создали пользовательские спидометры на холсте. Короче говоря, они добавляли 2 изображения на фоне холста и переднем плане и перемещали прямоугольную маску изображения переднего плана всякий раз, когда менялось значение скорости.
Я попытался настроить код ImageLinearGauge, чтобы показать прогресс в вертикальном направлении со следующими изменениями :
- Сохранение фонового изображения(измерительный прибор) путем уменьшения значения альфа до 0
- Создан движущийся прямоугольник, состоящий из изображения переднего плана(заполнитель)
- При изменении значения прогресса на панели поиска прямоугольник в маске,созданный на шаге 2, появляется поверх фона, что создает ощущение прогресса.
Мой Вопрос:
Я хочу, чтобы это изображение с маской на переднем плане было выровнено/перекрыто черными линиями, присутствующими в области розового цвета. Попробовал следующие подходы:
- поверните замаскированный прямоугольник на-20f вдоль его центра, но я мог видеть некоторые несоответствия в анимации.
rect.set(0, heightPa - (heightPa * getOffsetSpeed()).toInt(), widthPa, heightPa) val mat = Matrix() mat.setRotate(-20f, (widthPa/2).toFloat(),(heightPa - (heightPa * getOffsetSpeed()).toInt()/2).toFloat()); mat.mapRect(rectF) canvas.translate(padding.toFloat(), padding.toFloat()) canvas.drawBitmap(foregroundBitmap, rect, rectF, paint) canvas.translate((-padding).toFloat(), (-padding).toFloat())
- Попробовал повернуть холст — сохранение,вращение , рисование и восстановление холста , вся розовая область поворачивается.
canvas.rotate(-20f);//, (widthPa/2).toFloat(),(heightPa - (heightPa * getOffsetSpeed()).toInt()/2).toFloat()); mat.mapRect(rectF) canvas.translate(padding.toFloat(), padding.toFloat()) canvas.drawBitmap(foregroundBitmap, rect, rectF, paint) canvas.translate((-padding).toFloat(), (-padding).toFloat()) canvas.restore();
Есть ли какой-нибудь другой подход, могу я попробовать? Пожалуйста, предложите!!