2017-01-06 7 views
0

ボタンをクリックすると飛行しているはずのImageViewがあります。この目的のために、私はObjectAnimatorを使ってTRANSLATION_YとTRANSLATION_Xプロパティをアニメーション化します。ViewGroupの循環クリップ境界を作成する方法

ImageViewの親の輪郭線を定義して、正しく飛行させる必要があります。

私は次のコード

public class CircleFrameLayout extends FrameLayout { 

    private Path mClipPath = new Path(); 

    //Constructors 

    @Override 
    protected void onDraw(Canvas canvas) { 
     mClipPath.reset(); 
     float radius = Math.min((float)getMeasuredWidth()/2f, (float)getMeasuredHeight()/2f) + 5; 
     mClipPath.addCircle((float)getMeasuredWidth()/2f, (float)getMeasuredHeight()/2f, radius, Path.Direction.CCW); 
     canvas.clipPath(mClipPath); 
     super.onDraw(canvas); 
    } 
} 

を使用しますが、何も起こりません。このため

。 ImageViewは矩形ではなく、親の輪郭線を使用します。

何が問題ですか?

+0

オーバーライド 'draw'、' onDraw' – pskink

+0

は残念ながら –

+0

役立ついくつかの 'Log.d'文を追加し、'のためのparamsを確認していませんでしたではないがaddCircle'が正しい – pskink

答えて

1

onDrawは通常、ViewGroupクラス(カスタムFrameLayoutなど)では呼び出されません。あなたが望む動作を取得するためには、代わりにdispatchDrawを上書き:

private Path mClipPath = new Path(); 

@Override 
protected void dispatchDraw(Canvas canvas) { 
    mClipPath.reset(); 
    float radius = Math.min((float)getMeasuredWidth()/2f, (float)getMeasuredHeight()/2f) + 5; 
    mClipPath.addCircle((float)getMeasuredWidth()/2f, (float)getMeasuredHeight()/2f, radius, Path.Direction.CCW); 
    canvas.clipPath(mClipPath); 
    super.dispatchDraw(canvas); 
} 
関連する問題