2017-08-10 263 views
2

我想用旋轉的ImageView填充屏幕。如何用ImageView填充屏幕以及如何旋轉ImageView的問題在網站上單獨進行了多次回答。我的XML代碼如下所示。ImageView旋轉+填充屏幕

<ImageView 
    android:id="@+id/video_frame" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:adjustViewBounds="true" 
    android:scaleType="fitCenter" 
    android:rotation="270" 
/> 

的問題在於後的圖像已經裝在沒有施加旋轉和我結束了不填滿屏幕圖像旋轉發生。

我當然可以只旋轉圖像(和刪除ImageView的旋轉)如下:

Matrix mMatrix = new Matrix(); 
mMatrix.postRotate(-90); 
ImageView video = (ImageView)findViewById(R.id.video_frame); 
Bitmap frame = BitmapFactory.decodeFile("path/to/file.jpg"); 
Bitmap frame2 = Bitmap.createBitmap(frame, 0, 0, frame.getWidth(), frame.getHeight(), mMatrix, true); 
video.setImageBitmap(frame2); 

這裏的問題是,應用程序是實時的,我服每秒multipe幀(20+) 。每幀的旋轉看起來很重,即使在這種情況下圖像填滿了屏幕,結果仍然滯後,並且沒有矩陣旋轉那樣響應。

因此,我的問題是,如果我能解決這個問題,只用XML或以任何其他方式沒有旋轉我想要顯示的每個圖像?

回答

1

您可以使用RotateLayout,把你的ImageView在RotateLayout並通過您的旋轉的RotateLayoutsetAngle()方法,所以它僅使瀏覽圖片不能或者我們可以說bitmap它比圖像的任何其他旋轉得更快。

您可以在Gradle文件中添加它的依賴項。

使用

在佈局文件中添加

<com.github.rongi.rotate_layout.layout.RotateLayout 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:angle="90"> <!-- Specify rotate angle here --> 

    <YourLayoutHere 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    </YourLayoutHere> 
</com.github.rongi.rotate_layout.layout.RotateLayout> 

瞧!您的佈局將旋轉90度。

下載

compile 'rongi.rotate-layout:rotate-layout:3.0.0' 

特點

手柄以正確的方式,所有的觸摸事件。你按下你觸摸的同一個按鈕! 佈局以正確的方式測量自身。這意味着如果原始視圖是50x100,然後旋轉90度,則它將自己測量爲100x50,並且可以適合具有該尺寸的另一佈局。

RotateLayout Link

+0

感謝那些工作。我必須在'''''RotateLayout'''中設置'''layout_height =「fill_parent」'''(它成爲90度旋轉後的寬度)。 – rex123