2014-10-05 2 views
0

다양한 Android 버전에서 이미지보기가있는 레이아웃 (예 : FrameLayout)을 회전 할 때 이상한 동작이 발생합니다. Android 4.3 이전 버전의 레이아웃 회전 및 자르기 동작

은 XML 레이아웃의 다음 조각을 살펴 보자 :

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000000" > 

    <FrameLayout 
     android:layout_width="250dp" 
     android:layout_height="250dp" 
     android:background="#ffffff" 
     android:layout_gravity="center" 
     android:rotation="15" > 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop" 
      android:src="@drawable/bg" /> 

    </FrameLayout> 

</FrameLayout> 

다음은 안드로이드 4.2, 4.1, 4.0.3에 안드로이드 4.3 및 4.4,하지만 이상한 결과에 좋은 ​​결과를 표시합니다. 이 경우 Android 4.3 이전에 발생하고 그것을 해결하는 방법을 왜 안드로이드 4.2 (나쁜 결과)에

안드로이드 4.3 (좋은 결과)에

enter image description here

enter image description here

누구나 알고 ?

감사합니다.

+0

시도를보기 애니메이션에서 특성 기반의 애니메이션 (http://developer.android.com/guide/topics/graphics/prop-animation.html) (HTTP로 전환 : //developer.android.com/guide/topics/graphics/view-animation.html). 다소 비슷한 문제가 있었으며이 스위치로 해결되었습니다. – aga

+0

감사하지만 애니메이션과 관련이 없습니다. 모든 것을 회전시키려는 정적 인 레이아웃. –

+0

@ TheGreatDescartes 실제 기기에서 사용해 보셨습니까? 에뮬레이터 문제 일 수 있습니다. 코드를 통해 설정하려고 했습니까? 아니면 실제로 내부 FrameLayout을 도려 냈고 대신 imageView를 대신 (또는 그 내용) 회전 시켰습니까? 다음은 물건을 회전시키는 몇 가지 방법입니다 : http://stackoverflow.com/questions/1930963/rotating-a-view-in-android. BTW, 애니메이션에 대해서는 Honeycomb부터 시작하여 실제로 애니메이션이 작동하는 방식입니다. 애니메이션이 실행되면서 회전 필드의 값이 변경되고 둘 다 동기화됩니다. –

답변

0

"GPU 호스트 사용"을 활성화하지 않았기 때문에 문제가 재현되지 않는 것 같습니다.

어쨌든, 여기,이를 극복 할 수있는 방법의 경우에도이 기능의 사용 : 이미지 뷰에 대한 layerType = "소프트웨어" :

안드로이드를 설정합니다.

이 속성은 성능에 영향을주기 때문에 애니메이션을 적용하지 않아도됩니다.

더 나은 Android 버전의 경우 더 나은 버전으로 만들려면 문제가있는 버전 (포함) 및 그 위의 "하드웨어"에 대한 "소프트웨어"가 될 리소스를 만드는 것이 좋습니다.

다른 처리 방법을 시도했지만 제대로 작동하지 않습니다.

런타임에 layerType을 재설정 할 수 있으므로 제대로 작동 할 수 있습니다. 그것은 나를 위해 일했습니다.

단지 전화 :

@Override 
    protected void onCreate(final Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    findViewById(R.id.imageView1).setLayerType(View.LAYER_TYPE_HARDWARE,null); 
    } 
관련 문제