2010-09-28 24 views
23

是否可以創建比屏幕更大的視圖?如何創建比屏幕更大的視圖?

我需要一個寬度比設備屏幕寬的視圖。我在旋轉動畫中使用這個視圖。在旋轉期間,在動畫視圖之前不在屏幕上的部分將變得可見。

有沒有辦法用android框架來實現這種效果?

更新

我試圖設置更大然後屏幕我的父母佈局,這是工作。這會使一些有點不舒服,但它可以工作。接下來的問題是我的佈局仍然在屏幕的左側開始。我想不出一種方法來讓佈局自行展開到屏幕的左側和右側。

+1

「我試圖設置我的父母佈局比屏幕大得多,它正在工作」你是怎麼做到的? – Pacerier 2012-02-14 10:17:50

+1

例如'android:layout_height =「1000dp」' – Harry 2015-06-08 04:08:59

回答

12

好吧,我得到了一個答案。這不是很好,因爲它使用了不推薦使用的View類,但它至少在我當前的測試屏幕分辨率上工作,其他分辨率將在明天進行測試。

我包,我想在一個絕對佈局類似這樣的擴展超出屏幕的觀點:

<AbsoluteLayout 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignParentBottom="true"> 

    <ImageView 
    android:id="@+id/content" 
    android:layout_width="600dip" 
    android:layout_height="420dip" 
    android:scaleType="centerCrop" 
    android:layout_x="-200dip" 
    android:layout_y="60dip" 
    android:src="@color/testcolor" /> 

</AbsoluteLayout> 

-200 x座標,使視圖堅持200dip在屏幕的左側。如果我爲視圖製作動畫,屏幕外部的這些部分將逐漸變得可見。

+2

absoluteLayout現在已被棄用 – yeahdixon 2012-06-04 19:54:43

+5

看起來像在FrameLayout中包裝ImageView使負邊緣成爲可能。我不明白爲什麼Android只是爲了在屏幕外/部分屏幕外放置視圖而感到非常痛苦。 – John 2015-03-27 08:03:36

0

您可以使用ViewSwitcher來處理。用於AnimationOnGestureListener看起來不錯。

+0

我不想切換視圖我希望隨着用戶旋轉手機旋轉一個視圖,並根據手機方向顯示其不同部分。 – Janusz 2010-09-28 13:23:26

+0

比我推薦Paresh Mayani建議的或SurfaceView的實現... – WarrenFaith 2010-09-28 13:29:54

1
Is it possible to create a view that is bigger then screen? 

爲什麼不呢,你可以用PX(或)如你想要儘可能多的定義Layout_Width和Layout_height:

android:layout_width="10000px" 
android:layout_height="20000px" 
+7

是的,但是視圖的父佈局會在視圖變大時將其剪裁。 – Janusz 2010-09-28 13:21:48

+0

但是,您可以使用具有負值的佈局填充,以便您可以在裏面「滾動」。 – WarrenFaith 2010-09-28 13:29:29

+0

好吧,我不是很具體,我更新了我的問題,這實際上可以工作,但我現在有另一個問題。 – Janusz 2010-09-28 13:33:35

6

E.g.設置負底部邊距以及設置特大的layout_height(足夠大)解決了類似的問題。

工作正常,至少使用API​​ 11+動畫/旋轉。

可能看起來像:

機器人:layout_marginBottom = 「 - 1000dp」 機器人:layout_height = 「1000dp」

+0

設置負餘量對我而言很奇怪,但它工作正常並且是單線解決方案。 – 2016-06-14 15:45:54

1

你需要改變窗口的大小,getWindow() .setLayout。這會增加窗口的大小。由於根佈局可以像父級一樣大,因此可以增加要比屏幕大小更大的視圖的大小。它適用於我讓我知道

+0

請檢查我的答案,它應該使你的表面視圖大於屏幕 – 2013-03-24 22:38:19

1

您可以覆蓋onMeasure方法的意見。這將設置您的視圖尺寸1000x1000px

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    setMeasuredDimension(1000, 1000); 
} 
+0

onMeasure被稱爲經常tho – 2016-06-14 15:48:58

0

你可以做到這一點編程:

FrameLayout.LayoutParams rootViewParams = (FrameLayout.LayoutParams) rootView.getLayoutParams(); 
    rootViewParams.height=displayMetrics.heightPixels+(int)dpToPixels(60); 
    rootViewParams.width=displayMetrics.widthPixels+(int)dpToPixels(60); 
    rootView.setLayoutParams(rootViewParams); 
    rootView.setX(rootView.getX() - dpToPixels(30)); 
    rootView.setY(rootView.getY() - dpToPixels(30)); 

必須只在 「公共無效onWindowFocusChanged(布爾hasFocus)」 方法。

 rootView = (RelativeLayout) findViewById(R.id.rootLayout); 

Inside 「的保護無效的onCreate(捆綁savedInstanceState)」 方法。

凡YOUT .xml文件是這樣的:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/rootLayout" 
    tools:context="com.example.Activity"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_centerHorizontal="true" 
    android:layout_margin="30dp" 
    android:layout_centerVertical="true" 
    android:layout_height="match_parent"> 

    // Bla bla bla 

</RelativeLayout> 

和:

public float dpToPixels(float dp) { 
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); 
} 
4

如果現在還有人在此頁上出現。關鍵是你的根佈局,它只能使用FrameLayout(或不贊成的絕對佈局)。然後你有兩種選擇讓你的孩子看起來更大。

  1. 通過XML,這是快速和容易的,但你不知道實際的屏幕寬度&提前高度,使你的斷與layout_width & layout_height覆蓋所有屏幕設置一個高的離譜值。
  2. 計算屏幕尺寸編程,使視圖的寬/高比例大到這個..

另外要注意,你的思路更加開闊仍然開始在屏幕的左上角所以考慮到這一點,你會必須給出一個否定的頂部&左側距這就是你要添加到視圖的寬/高什麼

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) viewToMakeBigger.getLayoutParams(); 
int marginLeft = (int) (viewToMakeBigger.getWidth()*0.1); 
int marginTop = (int) (viewToMakeBigger.getHeight()*0.1); 
params.width = (int) (viewToMakeBigger.getWidth()*1.2); 
params.height = (int) (viewToMakeBigger.getHeight()*1.2); 
params.leftMargin = -marginLeft;  
params.topMargin = -marginTop; 
viewToMakeBigger.setLayoutParams(params); 
+0

@JasonHartley,你問:「你有沒有嘗試使用負邊距?這不就是@Jordy的答案('params.leftMargin = -marginLeft'等)中的代碼在做什麼? – 2016-08-02 16:05:15

+0

@JasonHartley,如果您刪除您的評論,我會刪除我的!留下評論,比如「先在下一分鐘中刪除」,這樣我會注意到。謝謝。 – 2016-08-05 16:23:35

1

下面這個簡單的axml創建一個ImageView的比屏幕(即使layout_width設置更寬400dp一半等於父母的寬度)使用負左和右200dp的餘量。

ImageView位於屏幕頂部250dp以上,使用負頂部邊距,屏幕上可見450dp的700dp垂直像素。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
<ImageView 
     android:background="#FFFF0000" 
     android:layout_height="700dp" 
     android:layout_marginLeft="-200dp" 
     android:layout_marginRight="-200dp" 
     android:layout_marginTop="-250dp" 
     android:layout_width="match_parent" /> 
</RelativeLayout>