2016-11-19 3 views
0

イムを作成することができません...それが描画されるときのビューをアニメーション化するには、次のコードを使用して成長しているビュー

public class MyView extends View { 

    int iCurStep = 0;// current animation step 

    class Points { 
     float x, y; 

     Points(float _x, float _y) { 
      x = _x; 
      y = _y; 
     } 
    } 

    Points[] drawPaths = {new Points(-75, 0), new Points(20, 60), new Points(60, 20)}; 


    public MyView(Context context) { 
     super(context); 
    } 

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public MyView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    @Override 

    protected void onDraw(Canvas canvas) { 

     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setColor(Color.GREEN); 
     paint.setStrokeWidth(2); 
     paint.setStyle(Paint.Style.STROKE); 

     Path  path  = new Path(); 
     PathMeasure pm   = new PathMeasure(path, false); 

     if (iCurStep <= 20) { 
      pm.getPosTan(fSegmentLen * iCurStep, afP, null); 
      path.moveTo(drawPaths[0].x, drawPaths[0].y); 
      for (int i = 1; i < drawPaths.length; i++) { 
       path.lineTo(drawPaths[i].y, drawPaths[i].y); 
      } 
      canvas.drawPath(path, paint); 
      iCurStep++; 
     } else { 
      iCurStep = 0; 
     } 
    } 
} 

何イム期待し、それは私が意味する...成長しているビューでなければならない、ということですそれが描かれている時にはビューが成長しなければならない...しかし、そうするために生産することができないイム...どのように私はこれを整理することができますか?

答えて

1

ObjectAnimatorを使用してください。

通常通りビューを作成しますが、ObjectAnimator(docs:https://developer.android.com/reference/android/animation/ObjectAnimator.html)を作成します。フラグメントやアクティビティでは、このようなことを行います(XMLでも可能です)。基本的に、プロパティ文字列を持つオブジェクトのObjectAnimatorを作成します。プロパティー文字列には、camelCaseセッターが必要です。したがって、view.setScaleX()を変更するプロパティとして呼び出す場合は、プロパティ文字列を 'scaleX'に設定する必要があります。ここに簡単な例があります。

View growMe = new View(args); 
float startSize = 1.0f; 
float endSize = 2.0f; 
ObjectAnimator grower = ObjectAnimator.ofFloat(growMe, "scaleX", startSize, endSize); 
int durationMs = 1000; 
grower.setDuration (durationMs) 
grower.start(); 

あなたがする必要があります一つの他の事は実際にはアニメーションの最後として正しいとサイズを調整し、あなたのビューにAnimationListenerを追加することです(私は信じている - 私が間違っているのかもしれませんこの部分)では、アニメーションが終了した後にビューのサイズが変更されます。

私はそれが助けてくれることを願っています!

+0

パスに従わなければならないので、私のコードを参照して説明してください。 –

+0

「成長しています」という意味がわかりません。ビューを '成長' -75,0にしたいですか?これは、ビューがx方向に75ピクセル移動し、ビューがxディメンションで75ピクセルを縮小するか、またはビューの左側が75ピクセル左に移動することを意味しますか? – Eric

+0

いいえ....私はビューがゼロから完全に成長しなければならないことを意味する –

関連する問題