2011-09-06 6 views
1

다음 클래스를 사용하여 회전 가능한 대화 상자를 만들고 모든 것이 정상입니다.내부에 애니메이션이있는 대화 상자를 회전 할 때 문제가 발생했습니다.

import android.content.Context; 

import android.graphics.Canvas; 
import android.graphics.Matrix; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.LinearLayout; 

public class RotateLinearLayout extends LinearLayout { 

private Matrix mForward = new Matrix(); 
private Matrix mReverse = new Matrix(); 
private float[] mTemp = new float[2]; 
private float degree = 0; 

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

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

@Override 
protected void dispatchDraw(Canvas canvas) { 
    if (degree == 0) { 
     super.dispatchDraw(canvas); 
     return; 
    } 
    canvas.rotate(degree, getWidth()/2, getHeight()/2); 
    mForward = canvas.getMatrix(); 
    mForward.invert(mReverse); 
    canvas.save(); 
    canvas.setMatrix(mForward); // This is the matrix we need to use for 
           // proper positioning of touch events 
    super.dispatchDraw(canvas); 
    canvas.restore(); 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent event) { 
    if (degree == 0) { 
     return super.dispatchTouchEvent(event); 
    } 
    final float[] temp = mTemp; 
    temp[0] = event.getX(); 
    temp[1] = event.getY(); 

    mReverse.mapPoints(temp); 

    event.setLocation(temp[0], temp[1]); 
    return super.dispatchTouchEvent(event); 
} 

public void rotate() { 
    if (degree == 0) { 
     degree = 180; 
    } else { 
     degree = 0; 
    } 
} 
} 

저는이 대화 상자의 왼쪽에 애니메이션이 장착되어 있습니다. 대화 상자가 회전하지 않으면 ImageView가 올바르게 움직입니다. 대화 상자를 회전 할 때 ImageView는 대화 상자의 오른쪽에 애니메이션을 적용해야하지만 이전에 배치 한 ImageView의 화면 픽셀을 추악한 상태로 변경합니다. 회전 후 ImageView의 위치는 바뀌지 만 애니메이션의 위치는 변하지 않습니다.

어떻게 ImageView의 애니메이션의 새 위치를 설정할 수 있습니까?

답변

0

난 그냥 라인 invalidate();을 추가하고 모든 것이 수정되었습니다 :

@Override 
protected void dispatchDraw(Canvas canvas) { 
    if (degree == 0) { 
     super.dispatchDraw(canvas); 
     return; 
    } 
    canvas.rotate(degree, getWidth()/2, getHeight()/2); 
    mForward = canvas.getMatrix(); 
    mForward.invert(mReverse); 
    canvas.save(); 
    canvas.setMatrix(mForward); // This is the matrix we need to use for 
           // proper positioning of touch events 
    super.dispatchDraw(canvas); 
    canvas.restore(); 
    // is needed 
    invalidate(); 
    } 
관련 문제