如何创建比屏幕大的视图?

时间:2010-09-28 13:12:06

标签: android layout

是否可以创建比屏幕更大的视图?

我需要一个宽度大于设备屏幕的视图。我在旋转动画中使用此视图。在旋转期间,在动画视图之前不在屏幕上的部件将变得可见。

有没有办法用android框架实现这个效果?

更新

我试图将我的父布局设置得比屏幕大得多,它正在运行。这会使某些事情有点不舒服,但它可以工作。现在的下一个问题是我的布局仍然从屏幕的左侧开始。我想不出一种方法可以让布局扩展到屏幕的左侧和右侧。

10 个答案:

答案 0 :(得分:15)

好的我得到了答案。它不是很好,因为它使用了一个已弃用的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离开屏幕的左侧。如果我正在为视图设置动画,那么屏幕外部的部分将逐渐变为可见。

答案 1 :(得分:8)

E.g。设置负底边距和设置超大layout_height(足够大)可以解决类似的问题。

至少使用API​​ 11+动画/旋转才能正常工作。

看起来像:

  

机器人:layout_marginBottom = “ - 1000dp”   机器人:layout_height = “1000dp”

答案 2 :(得分:4)

Horizo​​ntalScrollView:

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

  

视图层次结构的布局容器,可由用户滚动,允许它大于物理显示。

答案 3 :(得分:4)

如果有人仍然出现在此页面上。关键是你的根布局,它只适用于FrameLayout(或不推荐的absolutelayout)。然后,您有两个选项可以让您的孩子看得更大。

  1. 到xml,这很快捷,但你不知道实际的屏幕宽度和宽度。提前加上高度,以便为layout_width&amp;设置一个非常高的值。 layout_height覆盖所有屏幕。
  2. 以编程方式计算屏幕尺寸,使视图的宽度/高度与此相比更大..
  3. 另请注意,您的较大视图仍然会从屏幕的左上角开始,因此为了说明这一点,您必须给出一个负面的顶部&amp;左边距是你要添加到视图宽度/高度

    的一半
    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);
    

答案 4 :(得分:2)

下面的简单axml使用200dp的负左右边距创建比屏幕宽400dp的ImageView(即使layout_width设置为等于父的宽度)。

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>

答案 5 :(得分:1)

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

为什么不,您可以根据需要使用 px (或 dip )定义Layout_Width和Layout_height:

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

答案 6 :(得分:1)

你需要通过getWindow()。setLayout来改变窗口的大小。这将增加窗口的大小。由于根布局可以与其父布局一样大,因此您可以增加想要大于屏幕大小的视图的大小。它适用于我让我知道

答案 7 :(得分:1)

您可以覆盖onMeasure方法的视图。这会将您的视图尺寸设置为1000x1000px

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

答案 8 :(得分:0)

您可以使用ViewSwitcher来处理。与AnimationOnGestureListener一起使用看起来非常不错。

答案 9 :(得分: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));

必须只有     “public void onWindowFocusChanged(boolean hasFocus)”方法。

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

在“protected void onCreate(Bundle savedInstanceState)”方法内部。

你的.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());
}