2012-01-10 3 views
0

회전을 적용해야하는 정사각형 이미지가있는 정사각형 이미지가있는 ImageView가있는 LinearLayout이 있습니다. 그 4면 각각에 ImageView를 경계 짓는 것은 4 개의 다른보기로 구성된 프레임입니다. ImageView를 45도 회전하면 ImageView가 다른 뷰에 의해 잘려 집니 까? rotateAnimation은 ImageView의 경계를 어떻게 존중합니까?rotateAnimation으로 정사각형을 회전하십시오.

+1

가 왜 그냥 그것을 밖으로 시도하고 어떻게되는지? –

답변

0

나는이 질문에 대한 답변을 것이라고 생각 :

참고 : 관계없이 애니메이션을 이동하거나 크기를 조정할 수있는 방법의, 애니메이션이 자동으로 수용 할 수 있도록 조정하지 않습니다 보유하고있는보기의 경계입니다. 그렇더라도 애니메이션은 뷰의 범위를 넘어서 여전히 그려지며 잘리지 않습니다. 그러나 애니메이션이 부모 View의 경계를 초과하면 클리핑이 발생합니다.

(Source)

1
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Matrix; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.KeyEvent; 
import android.widget.ImageView; 
import android.widget.ImageView.ScaleType; 


public class ImageFunctionsActivity extends Activity 

{

/** Called when the activity is first created. */ 
ImageView iv; 
float degree=0; 
GestureDetector gd; 
Context context; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    iv=(ImageView) findViewById(R.id.imageTeddy); 
    context=getApplicationContext(); 

    rotate(degree); 


} 

void rotate(float x) 
{ 
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.tedd); 

    int width = bitmapOrg.getWidth(); 

    int height = bitmapOrg.getHeight(); 


    int newWidth = 200; 

    int newHeight = 200; 

    // calculate the scale - in this case = 0.4f 

    float scaleWidth = ((float) newWidth)/width; 

    float scaleHeight = ((float) newHeight)/height; 

    Matrix matrix = new Matrix(); 

    matrix.postScale(scaleWidth, scaleHeight); 
    matrix.postRotate(x); 

    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,width, height, matrix, true); 

    iv.setScaleType(ScaleType.CENTER); 
    iv.setImageBitmap(resizedBitmap); 
} 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode==KeyEvent.KEYCODE_DPAD_UP) 
    { 
     degree=degree+10; 
     rotate(degree); 
    } 
    if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // rotate anti-clockwise 
    { 
      degree=degree-10; 
      rotate(degree); 
    } 

    return true; 
} 

}

+0

이 코드는 UP 키 또는 DOWN 키를 눌러 이미지를 회전합니다 ... – MAC

관련 문제