2010-09-28 39 views
23

Có thể tạo chế độ xem lớn hơn màn hình không?Cách tạo chế độ xem lớn hơn màn hình?

Tôi cần chế độ xem có chiều rộng lớn hơn màn hình của thiết bị. Tôi sử dụng chế độ xem này trong hoạt ảnh xoay. Trong khi quay các phần không có trên màn hình trước khi làm động, chế độ xem sẽ hiển thị.

Có cách nào để đạt được hiệu ứng này với khung android không?

Cập nhật

Tôi cố gắng để thiết lập bố trí cha mẹ của tôi lớn hơn nhiều sau đó màn hình và nó đang làm việc. Điều này sẽ làm cho somethings một chút khó chịu nhưng nó có thể làm việc. Vấn đề tiếp theo bây giờ là bố trí của tôi vẫn bắt đầu ở phía bên trái của màn hình. Tôi không thể nghĩ ra một phương pháp để làm cho bố cục mở rộng chính nó sang bên trái và bên phải của màn hình.

+1

"Tôi đã cố đặt bố cục bố cục của mình lớn hơn nhiều rồi màn hình và đang hoạt động" bạn đã làm như thế nào? – Pacerier

+1

Ví dụ: 'android: layout_height =" 1000dp "' – Harry

Trả lời

12

Ok Tôi có một câu trả lời. Nó không phải là rất tốt đẹp bởi vì nó sử dụng một lớp View không được chấp nhận nhưng nó hoạt động ít nhất là trên độ phân giải màn hình thử nghiệm hiện tại của tôi, các độ phân giải khác sẽ được kiểm tra vào ngày mai.

tôi quấn quan điểm cho rằng tôi muốn mở rộng ra ngoài màn hình trong một bố cục tuyệt đối như thế này:

<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> 

Các -200 tọa độ x làm cho quan điểm dính 200dip ra khỏi phía bên trái của màn hình. Nếu tôi đang tạo hoạt ảnh cho chế độ xem, những phần bên ngoài màn hình sẽ dần dần hiển thị.

+2

absoluteLayout hiện không được chấp nhận – yeahdixon

+5

Có vẻ như việc gói ImageView trong FrameLayout làm cho biên độ âm có thể xảy ra. Tôi không hiểu tại sao Android làm cho nó đau như vậy chỉ để đặt một cái nhìn off-screen/part-off-screen. – John

0

Bạn có thể sử dụng ViewSwitcher để xử lý điều đó. Được sử dụng với AnimationOnGestureListener trông khá tốt.

+0

Tôi không muốn chuyển đổi chế độ xem Tôi muốn chế độ xem quay khi người dùng xoay điện thoại và hiển thị các phần khác nhau tùy theo hướng điện thoại. – Janusz

+0

Hơn tôi đề nghị Paresh Mayani đã đề xuất hoặc thực hiện SurfaceView ... – WarrenFaith

3

HorizontalScrollView:

http://developer.android.com/reference/android/widget/HorizontalScrollView.html

Layout container cho phân cấp hình ảnh có thể được cuộn bởi người sử dụng, cho phép nó có lớn hơn so với màn hình vật lý.

+3

Tôi không nghĩ rằng hoạt ảnh là chế độ xem cuộn là ý tưởng hay. – Janusz

+0

Điều này sẽ được đánh dấu là câu trả lời đúng vì AbsoluteLayouts không được chấp nhận – vosmith

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

Tại sao không, bạn có thể xác định layout_width và Layout_height với px (hoặc nhúng) càng nhiều càng tốt muốn:

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

Có nhưng bố cục gốc của chế độ xem sẽ cắt chế độ xem nếu nó lớn hơn sau đó. – Janusz

+0

Nhưng bạn có thể sử dụng phần đệm của bố cục với các giá trị âm cho phép bạn "cuộn" bên trong. – WarrenFaith

+0

Được rồi Tôi không cụ thể lắm, tôi đã cập nhật câu hỏi của mình, điều này thực sự có thể hiệu quả nhưng hiện tại tôi có một vấn đề khác. – Janusz

6

Ví dụ: thiết lập lề dưới cùng âm với nhau với thiết lập layout_height cực lớn (đủ lớn cho bạn) đã giải quyết được vấn đề tương tự như đối với tôi.

Hoạt động tốt ít nhất bằng cách sử dụng hoạt ảnh/xoay vòng API 11+.

thể trông giống như:

android: layout_marginBottom = "- 1000dp" android: layout_height = "1000dp"

+0

Đặt lề âm là một điều lạ đối với tôi, nhưng nó hoạt động tốt và là giải pháp một dòng. –

1

Bạn cần thay đổi kích thước của cửa sổ, bởi GetWindow() .setLayout. Điều này sẽ làm tăng kích thước cho cửa sổ của bạn.Vì bố cục gốc có thể lớn bằng bố cục gốc nên bạn có thể tăng kích thước của chế độ xem bạn muốn lớn hơn kích thước màn hình. Nó hoạt động cho tôi cho tôi biết

+0

Vui lòng kiểm tra câu trả lời của tôi nó sẽ làm cho bề mặt của bạn lớn hơn màn hình –

1

Bạn có thể ghi đè chế độ xem trên phương pháp Measure. Điều này sẽ thiết lập kích thước của bạn để xem 1000x1000px

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

onMeasure được gọi là thường xuyên –

0

Bạn có thể làm điều đó cách lập trình:

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)); 

PHẢI CHỈ TRONG "public void onWindowFocusChanged (boolean hasFocus)" phương pháp.

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

Inside "protected void onCreate (Bundle savedInstanceState)" phương pháp.

đâu yout .xml tập tin là như thế này:

<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> 

và:

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

Trong trường hợp bất cứ ai vẫn đi lên trên trang này. Chìa khóa là bố cục gốc của bạn, nó sẽ chỉ hoạt động với FrameLayout (hoặc bản trích lục tuyệt đối không được dùng nữa). Sau đó, bạn có hai tùy chọn để làm cho con bạn xem lớn hơn.

  1. qua xml, đây là nhanh chóng và dễ dàng, nhưng bạn không biết chiều rộng màn hình thực tế & chiều cao trước để tắt của bạn với thiết lập một giá trị ridiculously cao cho layout_width & layout_height để trang trải tất cả các màn hình.
  2. Tính kích thước màn hình programatically và làm của quan điểm chiều rộng/chiều cao tỷ lệ lớn hơn để này ..

Cũng lưu ý rằng quan điểm lớn của bạn vẫn bắt đầu ở góc trên bên trái của màn hình như vậy để chiếm này, bạn sẽ phải từ bỏ một top & lề trái tiêu cực đó là một nửa của những gì bạn đang làm tăng thêm chiều rộng của view/chiều cao

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, bạn hỏi "Bạn đã thử sử dụng một lề âm?" Đó không phải là những gì mã trong câu trả lời của @ Jordy ('params.leftMargin = -marginLeft', vv) đang làm gì? –

+0

@JasonHartley, nếu bạn xóa nhận xét của mình, tôi sẽ xóa bài đăng của tôi! Để lại một bình luận như "loại bỏ trong phút tiếp theo" đầu tiên vì vậy tôi sẽ nhận thấy. Cảm ơn. –

1

các axml đơn giản dưới đây tạo ra một ImageView đó là 400dp rộng hơn so với màn hình (mặc dù layout_width được thiết lập bằng với chiều rộng của bố mẹ) bằng cách sử dụng trái và phải âm lề 200dp.

ImageView nằm 250dp phía trên cùng của màn hình bằng cách sử dụng lề trên phủ định, với 450dp pixel dọc 700dp hiển thị trên màn hình.

<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> 
Các vấn đề liên quan