Android에서보기 회전
45도 각도로 놓고 싶은 버튼이 있습니다. 어떤 이유로 나는 이것을 작동시킬 수 없습니다.
누군가 이것을 수행하기 위해 코드를 제공 할 수 있습니까?
API 11 은 모든 뷰에 setRotation () 메서드를 추가했습니다 .
애니메이션을 만들어 버튼보기에 적용 할 수 있습니다. 예를 들면 :
// Locate view
ImageView diskView = (ImageView) findViewById(R.id.imageView3);
// Create an animation instance
Animation an = new RotateAnimation(0.0f, 360.0f, pivotX, pivotY);
// Set the animation's parameters
an.setDuration(10000); // duration in ms
an.setRepeatCount(0); // -1 = infinite repeated
an.setRepeatMode(Animation.REVERSE); // reverses each repeat
an.setFillAfter(true); // keep rotation after animation
// Aply animation to image view
diskView.setAnimation(an);
TextView
클래스를 확장하고 onDraw()
메서드를 재정의합니다 . 상위 뷰가 회전 된 버튼을 클리핑하지 않고 처리 할 수있을만큼 충분히 큰지 확인합니다.
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.rotate(45,<appropriate x pivot value>,<appropriate y pivot value>);
super.onDraw(canvas);
canvas.restore();
}
내 코드에서 간단한 줄을 사용했으며 작동합니다.
myCusstomView.setRotation(45);
그것이 당신을 위해 작동하기를 바랍니다.
XML의 한 줄
<View
android:rotation="45"
... />
회전 애니메이션 (지속 시간없이 애니메이션 효과가 없음)을 적용하는 것은 View.setRotation ()을 호출하거나 View.onDraw 메서드를 재정의하는 것보다 더 간단한 솔루션입니다.
// substitude deltaDegrees for whatever you want
RotateAnimation rotate = new RotateAnimation(0f, deltaDegrees,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
// prevents View from restoring to original direction.
rotate.setFillAfter(true);
someButton.startAnimation(rotate);
로 뷰를 회전 rotate()
해도 뷰의 측정 된 크기에는 영향을주지 않습니다. 결과적으로 회전 된보기가 잘 리거나 상위 레이아웃에 맞지 않습니다. 이 라이브러리는이를 수정합니다.
https://github.com/rongi/rotate-layout
Joininig @Rudi와 @Pete의 답변. 회전 후에도 버튼 기능을 유지하는 RotateAnimation을 만들었습니다.
setRotation () 메서드는 버튼 기능을 유지합니다.
코드 샘플 :
Animation an = new RotateAnimation(0.0f, 180.0f, mainLayout.getWidth()/2, mainLayout.getHeight()/2);
an.setDuration(1000);
an.setRepeatCount(0);
an.setFillAfter(false); // DO NOT keep rotation after animation
an.setFillEnabled(true); // Make smooth ending of Animation
an.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
mainLayout.setRotation(180.0f); // Make instant rotation when Animation is finished
}
});
mainLayout.startAnimation(an);
mainLayout은 (LinearLayout) 필드입니다.
@Ichorus의 대답은 뷰에 적합하지만 회전 된 사각형이나 텍스트를 그리려면 뷰의 onDraw (또는 onDispatchDraw) 콜백에서 다음을 수행 할 수 있습니다.
(theta는 원하는 회전의 x 축으로부터의 각도이고, pivot는 사각형이 회전하기를 원하는 지점을 나타내는 Point, horizontalRect는 회전 된 "전"사각형의 위치입니다.)
canvas.save();
canvas.rotate(theta, pivot.x, pivot.y);
canvas.drawRect(horizontalRect, paint);
canvas.restore();
참고 URL : https://stackoverflow.com/questions/1930963/rotating-a-view-in-android
'UFO ET IT' 카테고리의 다른 글
프로그래밍 방식으로 다른 뷰 컨트롤러 / 장면으로 이동 (0) | 2020.11.15 |
---|---|
aarch64-linux-android-strip 파일 누락 (0) | 2020.11.15 |
UIFont fontWithName 글꼴 이름 (0) | 2020.11.15 |
html5 시간 입력은 12 시간을 표시합니다. (0) | 2020.11.14 |
몽구스 제한 / 오프셋 및 개수 쿼리 (0) | 2020.11.14 |