Я создаю пользовательский вид, в котором у меня есть объект RectF прямоугольника с определенной высотой. Я хотел бы увеличить нижнюю Y-координату точки до определенного значения с прогрессивной анимацией.Анимация, чтобы увеличить размер прямоугольника в пользовательском представлении
Я пробовал следующее. Я создал метод setBatteryState(), который вызывается на onclicked метода в деятельности, которая содержит пользовательский вид:
public class BatteryView extends View {
public int mCanvasWidth;
public int mCanvasHeight;
public RectF mBatteryHead;
public RectF mBatteryBody;
public RectF mBatteryBodyVolume;
public Canvas mCanvas;
public BatteryView(Context context) {
super(context);
}
public BatteryView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void init()
{
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
this.mCanvas = canvas;
float batteryHeadDistanceFromLeft = mCanvasWidth/3;
float batteryHeadWidth = mCanvasWidth/3;
float batteryBodyDistanceFromTop = mCanvasHeight/5;
float batteryHeadHeight = mCanvasHeight/5;
mBatteryHead = new RectF(batteryHeadDistanceFromLeft,0,2*batteryHeadWidth,batteryHeadHeight+5);
Paint batteryHeadPaint = new Paint();
batteryHeadPaint.setColor(ContextCompat.getColor(getContext(), R.color.batifyColor));
canvas.drawRect(mBatteryHead,batteryHeadPaint);
mBatteryBody = new RectF(0,(int)batteryBodyDistanceFromTop,mCanvasWidth,mCanvasHeight);
Paint batteryBodyPaint = new Paint();
batteryBodyPaint.setStyle(Paint.Style.STROKE);
batteryBodyPaint.setColor(ContextCompat.getColor(getContext(), R.color.batifyColor));
batteryBodyPaint.setStrokeWidth(10);
canvas.drawRect(mBatteryBody,batteryBodyPaint);
mBatteryBodyVolume = new RectF(12,(int)batteryBodyDistanceFromTop + 10,mCanvasWidth-12,mCanvasHeight/2);
Paint volumeBodyPaint = new Paint();
volumeBodyPaint.setColor(ContextCompat.getColor(getContext(), R.color.batifyColor));
canvas.drawRect(mBatteryBodyVolume,volumeBodyPaint);
}
public void setStateOnBattery(){
ObjectAnimator animateBottom = ObjectAnimator.ofFloat(mBatteryBodyVolume, "bottom", mBatteryBodyVolume.bottom, mCanvasHeight);
animateBottom.setDuration(1000).start();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
mCanvasWidth = MeasureSpec.getSize(widthMeasureSpec);
mCanvasHeight = MeasureSpec.getSize(heightMeasureSpec);
}}
ObjectAnimator должен перевести прямоугольник mBatteryBodyVolume до размера холст, но ничего не меняется ...
Любая идея?
Заранее благодарен!
Спасибо за ответ, немного кода будет замечательным, потому что не может понять, как сделать плавный рост ... –
Вы знаете, как правильно работать с асинхронными задачами? Я отредактирую ответ с помощью части кода. Пропущенную часть нужно очень легко придумать. – Rippr
Не беспокойтесь о асинхронных задачах :) –