是否可以创建一个比屏幕更大的视图?
我需要一个宽度比设备屏幕更大的视图,我在旋转动画中使用此视图。在旋转过程中,之前未显示在屏幕上的部分将变得可见。
有没有一种方法在Android框架中实现这个效果?
更新
我尝试将父布局设置得比屏幕大得多,这样做是有效的。虽然这样做可能会让某些事情变得有点不舒服,但仍然可以工作。现在的问题是,我的布局仍然从屏幕的左侧开始。我想不出一种方法来使布局自动扩展到屏幕的左侧和右侧。
好的,我得到了一个答案。它并不是很好,因为它使用了一个被弃用的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>
将x坐标设为-200会使视图在屏幕左侧外突出200dip。如果我正在对该视图进行动画处理,那么在屏幕外的这些部分将逐渐变得可见。
例如,将负的底部边距与设置超大的layout_height(足够大)一起设置,解决了与我类似的问题。
至少在使用API 11+的动画/旋转时可以正常工作。
可能看起来像这样:
android:layout_marginBottom="-1000dp" android:layout_height="1000dp"
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);
params.leftMargin = -marginLeft
等)正在做的吗? - CODE-REaDHorizontalScrollView:
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
它是一个布局容器,特点是可以让用户水平滑动查看视图层次结构,在物理显示器外形之外展示更大的内容。
<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>
您可以在onMeasure
方法中覆盖视图。这将设置您的视图尺寸为1000x1000像素。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(1000, 1000);
}
是否可以创建一个比屏幕更大的视图?
当然可以,你可以根据需要定义布局的宽度和高度,使用px(或dip)作为单位:
android:layout_width="10000px"
android:layout_height="20000px"
你可以通过编程来实现:
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());
}
ViewSwitcher
来处理这个问题。结合 Animation
和 OnGestureListener
使用效果非常好。
android:layout_height="1000dp"
。 - Harry