2017-01-06 20 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); 
}