2013-06-05 3 views
1

Я вращаю ImageView с postRotate (float degrees, float px, float py), устанавливая px и py в несколько разных значений, включая (0,0) и (imgView.getHeight(), imgView.getWidth()), но он отказывается вращаться вокруг любой другой точки, чем центр. Мне интересно, имеет ли он какое-либо отношение к тому факту, что моя сила тяжести находится в центре LinearLayout?Вращение изображения вокруг указанной точки не работает! (Android)

Моя раскладка:

<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" /> 

Как я поворот изображения:

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

PS Я заметил, есть несколько подобных вопросов, но ни один из них не имеют подходящие ответы.

ответ

3

Я использую обычай ImageView, где я устанавливаю поворот угла.

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

Если вы играете с clipBounds, это может оказаться полезным.

+0

Спасибо, я дам это сейчас. –

+0

Нет. Все еще отказывается вращаться вокруг любой другой точки, чем центр. –

+0

О нет! Оно работает! Мне просто нужно было вызвать setAngleRotation (очевидно). Единственная проблема заключается в том, что она обрезает изображение вокруг исходной границы. Любые идеи, как остановить это? –

1

Небольшой «взлом», возможно, вы можете настроить размер изображения, используя что-то вроде Paint.net или Gimp, в зависимости от вашей ОС. Это заставило бы изображение появиться в другой точке. Это решение было бы бессмысленным, если вы планируете использовать множество изображений. This - это учебник по вращающемуся кубу с использованием opengl.

+0

Это может дать вам некоторые подсказки, не могу комментировать ваш пост, lol – Lunchbox

+0

Да, это работает, но это не идеально для моей ситуации, поскольку у меня не может быть центра этого потенциального изображения в центре моего раскладка. –

+0

Изменение положения вашей линейной компоновки изменится, когда ваше изображение будет повернуто, хотя это не изменит точку, вокруг которой ваше изображение вращается. – Lunchbox