UFO ET IT

Android에서보기 회전

ufoet 2020. 11. 15. 12:08
반응형

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

반응형