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の大きさに矩形mBatteryBodyVolumeを変換する必要がありますキャンバスは何も変わりません...
すべてのアイデア?
ありがとうございます!
答えをありがとう、少しのコードは、スムーズに増加する方法を見つけることができないため、素晴らしいだろう... –
あなたは非同期タスクを正しく操作する方法を知っていますか?コードの一部で回答を編集します。省略された部分は考えるのが非常に簡単です。 – Rippr
非同期タスクに関する心配はありません:) –