2017-01-06 2 views
0

Ich habe ImageView, das sollte weg fliegen, wenn ich auf die Schaltfläche klicke. Zu diesem Zweck benutze ich ObjectAnimator, um die Eigenschaften TRANSLATION_Y und TRANSLATION_X zu animieren.So erstellen Sie kreisförmige Clip-Grenzen für ViewGroup

Ich muss kreisförmige Grenzen für übergeordnete meiner ImageView definieren, damit es korrekt wegfliegen.

Dazu verwende ich nächsten Code

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); 
    } 
} 

Aber nichts passiert. ImageView verwendet Rechteckgrenzen seiner übergeordneten und nicht kreisförmigen Grenzen.

Was ist das Problem?

+0

Überschreibung 'draw', nicht' onDraw' – pskink

+0

Hat leider nicht –

+0

helfen, einige 'Log.d' Aussagen hinzufügen und die params für sicherstellen, dass' addCircle' sind korrekt – pskink

Antwort

1

onDraw wird normalerweise nicht für ViewGroup-Klassen aufgerufen (wie Ihr benutzerdefiniertes FrameLayout). Um das gewünschte Verhalten zu erhalten, außer Kraft setzen dispatchDraw statt:

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); 
} 
Verwandte Themen