是否可以创建比屏幕更大的视图?
我需要一个宽度大于设备屏幕的视图。我在旋转动画中使用此视图。在旋转期间,在动画视图之前不在屏幕上的部件将变得可见。
有没有办法用android框架实现这个效果?
更新
我试图将我的父布局设置得比屏幕大得多,它正在运行。这会使某些事情有点不舒服,但它可以工作。现在的下一个问题是我的布局仍然从屏幕的左侧开始。我想不出一种方法可以让布局扩展到屏幕的左侧和右侧。
答案 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)
HorizontalScrollView:
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
视图层次结构的布局容器,可由用户滚动,允许它大于物理显示。
答案 3 :(得分:4)
如果有人仍然出现在此页面上。关键是你的根布局,它只适用于FrameLayout(或不推荐的absolutelayout)。然后,您有两个选项可以让您的孩子看得更大。
另请注意,您的较大视图仍然会从屏幕的左上角开始,因此为了说明这一点,您必须给出一个负面的顶部&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
来处理。与Animation
和OnGestureListener
一起使用看起来非常不错。
答案 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());
}