0
특정 높이를 갖는 사각형 RectF 개체가있는 사용자 지정보기를 만듭니다. 점진적인 애니메이션을 사용하여 아래쪽 Y 점 좌표를 특정 값으로 늘리고 싶습니다.사용자 정의보기에서 사각형의 크기를 늘리는 애니메이션
나는 다음을 시도했다. 나는 사용자 정의보기를 보유하고있는 활동에 onclicked 방법에 호출되는 방법 setBatteryState()를 만들었습니다
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의 크기로 RECT mBatteryBodyVolume을 번역해야 캔버스하지만 아무것도 변경되지 않습니다 ...
어떤 아이디어?
미리 감사드립니다.
답변 주셔서 감사합니다, 코드의 비트가 될 수 있기 때문에 위대한 것입니다 부드러운 증가하는 방법을 알아낼 수 없기 때문에 ... –
비동기 작업을 제대로하는 방법을 알고 계십니까? 나는 코드의 일부로 답을 편집 할 것이다. 생략 된 부분은 매우 쉽게 생각할 수 있어야합니다. – Rippr
그래도 비동기 작업에 대해 걱정할 필요가 없습니다. –