Android视图.setTranslationY()视图被裁剪

时间:2013-11-22 12:31:30

标签: android layout

我正在寻找几个小时,但找不到解决方案。我有一个布局如下:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/remote_parent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".TevidiHome$RemoteFragment" >

    <RelativeLayout
        android:id="@+id/remote_extra"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:context=".TevidiHome$FragmentRemote" >

        <TextView
            android:id="@+id/remote_text_active"
            android:layout_width="30dp"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="30dp"
            android:background="@drawable/border"
            android:textColor="@android:color/holo_orange_dark"
            android:textSize="30sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/remote_text_waiting"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="35dp"
            android:layout_marginRight="5dp"
            android:layout_toLeftOf="@id/remote_text_active"
            android:textSize="20sp" />

        <EditText
            android:id="@+id/remote_text_store"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="-500dp"
            android:layout_toLeftOf="@id/remote_text_waiting"
            android:descendantFocusability="beforeDescendants"
            android:focusable="true"
            android:imeOptions="actionNone"
            android:inputType="text|textNoSuggestions" />

        <ImageView
            android:id="@+id/remote_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/remote_text_active"
            android:layout_centerHorizontal="true"
            android:contentDescription="@string/remote_logo_desc"
            android:src="@drawable/number_block" />

        <ImageView
            android:id="@+id/remote_border"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/remote_logo"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="2dp"
            android:contentDescription="@string/remote_border_desc"
            android:src="@drawable/remote_border" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/remote_main"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="3dp"
        android:layout_below="@id/remote_extra"
        >

        <ImageView
            android:id="@+id/tevidi_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:contentDescription="@string/remote_tevidi_logo_desc"
            android:src="@drawable/tevidi_logo" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="10dp" >

            <ImageButton
                android:id="@+id/remote_sos"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="10dp"
                android:background="@drawable/button_sel"
                android:contentDescription="@string/remote_sos_desc"
                android:src="@drawable/sos_off" />

            <ImageButton
                android:id="@+id/remote_alarm"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/button_sel"
                android:contentDescription="@string/remote_alarm_desc"
                android:src="@drawable/alarm_off" />
        </LinearLayout>

        <!-- Arrows -->

        <ImageButton
            android:id="@+id/remote_top"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:lenter code hereayout_above="@+id/remote_ok"
            android:layout_centerHorizontal="true"
            android:background="@drawable/button_sel"
            android:contentDescription="@string/remote_top_desc"
            android:src="@drawable/remote_top" />

        <ImageButton
            android:id="@+id/remote_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/remote_ok"
            android:background="@drawable/button_sel"
            android:contentDescription="@string/remote_left_desc"
            android:src="@drawable/remote_left" />

        <ImageButton
            android:id="@+id/remote_ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@drawable/button_sel"
            android:contentDescription="@string/remote_ok_desc"
            android:src="@drawable/remote_ok" />

        <ImageButton
            android:id="@+id/remote_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/remote_ok"
            android:background="@drawable/button_sel"
            android:contentDescription="@string/remote_right_desc"
            android:src="@drawable/remote_right" />

        <ImageButton
            android:id="@+id/remote_down"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/remote_ok"
            android:layout_centerHorizontal="true"
            android:background="@drawable/button_sel"
            android:contentDescription="@string/remote_down_desc"
            android:src="@drawable/remote_down" />

        <!-- Bottom Buttons -->

        <ImageButton
            android:id="@+id/remote_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="30dp"
            android:background="@drawable/button_sel"
            android:contentDescription="@string/remote_back_desc"
            android:adjustViewBounds="true"
            android:src="@drawable/remote_back" />

        <ImageButton
            android:id="@+id/remote_menu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:layout_marginTop="30dp"
            android:background="@drawable/button_sel"
            android:contentDescription="@string/remote_menu_desc"
            android:src="@drawable/remote_menu" />

    </RelativeLayout>

</RelativeLayout>

通过View.setTranslationY(-170)从屏幕中绘制remote_extra布局,并通过一个轻弹手势将其向下滑动。这很好用。 问题是:由于TranslationY,remote_main布局不在屏幕的底部,而是在170pixels以上。我无法将它带回到谷底。当我以编程方式使remote_main布局更高时,按钮被切断。

无法添加屏幕截图。因此,我在这里:https://www.dropbox.com/s/52erx4jatzsqz80/Screenshot_2013-11-22-13-46-17.png

它应该就像这里一样。底部的空白区域应填充上面的视图:https://www.dropbox.com/s/xw8km88lmz9be4q/Screenshot_good.png

我尝试了下面没有任何帮助:

LayoutParams params = rootView.findViewById(R.id.remote_parent).getLayoutParams();
                rootView.findViewById(R.id.remote_parent).setTranslationY(UP_PADDING);

LayoutParams params2 = rootView.findViewById(R.id.remote_main).getLayoutParams();
params2.height = 1400;

((ViewGroup) rootView.findViewById(R.id.remote_parent)).setClipChildren(false);
((ViewGroup) rootView.findViewById(R.id.remote_main)).setClipChildren(false);
rootView.requestLayout();
rootView.invalidate();

有人有解决方案吗?

2 个答案:

答案 0 :(得分:0)

好的,我设法移动到按钮,但随后它们不再可点击;-(

所以我切换到了SlidingDrawer。过了一会儿,我发现它被弃用了,但不管怎样,它正是我需要的......

答案 1 :(得分:0)

我有类似的问题 - 翻译的视图高于屏幕(wrap_content的像素比Y维的屏幕更多),当我翻译视图时,底部部分根本没有呈现。

我的解决方案:将ScrollView用作隐藏视图,但如果它到达屏幕顶部,请拨打scrollTo()而不是translateY()

private void customScroll(int y)
{
    setTranslationY(Math.max(y, 0));
    scrollTo(0,Math.max(0, -y));
}