Das Drehen eines Bildes um einen bestimmten Punkt funktioniert nicht!(Android)



android rotate bitmap (2)

Ich rotiere ein ImageView mit postRotate (float Grad, float px, float py), setze px und py auf ein paar verschiedene Werte einschließlich (0,0) und (imgView.getHeight (), imgView.getWidth ()) aber es weigert sich, um irgendeinen anderen Punkt als das Zentrum zu rotieren. Ich frage mich, ob es etwas damit zu tun hat, dass meine Schwerkraft im LinearLayout im Mittelpunkt steht?

Mein Layout:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">

    <ImageView
        android:id="@+id/imageTraj"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="matrix"
        android:src="@drawable/impactangle" />

Wie ich das Bild rotiere:

matrix.postRotate(degrees,imageView.getHeight(),imageView.getWidth());
imageView.setImageBitmap(Bitmap.createBitmap(imageScaled, 0, 0,
                imageScaled.getWidth(), imageScaled.getHeight(), matrix, true));

PS Ich habe bemerkt, dass es ein paar ähnliche Fragen gibt, aber keine von ihnen hat passende Antworten.


Ich verwende ein benutzerdefiniertes ImageView in dem ich die ImageView festlege.

public class CompassImage extends ImageView {
    private float angleRotation;

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

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

    public CompassImage(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setAngleRotation(float angleRotation) {
        this.angleRotation = angleRotation;
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        Rect clipBounds = canvas.getClipBounds();
        canvas.save();
        canvas.rotate(angleRotation, clipBounds.exactCenterX(), clipBounds.exactCenterY());
        super.onDraw(canvas);
        canvas.restore();
    }
}

Wenn Sie mit ClipBounds herumspielen, können Sie das hilfreich finden.


Ein leichter "Hack", Sie könnten wahrscheinlich die Bildgröße mit etwas wie Paint.net oder Gimp, abhängig von Ihrem Betriebssystem anpassen. Das würde das Bild so aussehen lassen, als würde es sich an einem anderen Punkt drehen. Diese Lösung wäre jedoch sinnlos, wenn Sie viele Bilder verwenden möchten. Dies ist ein Drehwürfel Tutorial mit OpenGL.





image-rotation