TranslateAnimation移动到其他视图出现

时间:2014-02-18 18:11:50

标签: android translate-animation

我正在使用TranslateAnimation使片段(GoogleMap)向下滑动,以便为EditText提供空间,并使TextView可见。 所以我用过这个:

text:TextView

编辑:EditText

MapLayout:包含地图

的LinearLayout
Animation animation = new TranslateAnimation(
MapLayout.getX(), MapLayout.getY(),MapLayout.getY(), text.getHeight()+edit.getHeight());

问题是我无法制作幻灯片,因为text.getHeight()+ edit.getHeight()返回0,所以没有幻灯片! 我尝试使用一个数字(例如100),制作幻灯片,但设备之间有所不同,我在Galaxy S3上测试并且幻灯片不完整,仍然有一部分EditText不可见,至于它运行正常的模拟器。 当我试图使数字更大时,幻灯片将更长(例如200),好吧......幻灯片对S3很好,但我对模拟器来说很重要。

所以我想知道的是,如果有任何方法可以让幻灯片移动到某个点,而不依赖于设备,我的意思是不使用像素;因此幻灯片可以在任何设备/

中完美运行

我希望我的问题很明确。 谢谢

更新:如果这会有所帮助,我不会这样做,我添加了一个Toast消息,显示EditText和TextView的高度,在模拟器中它显示:85,在S3中它显示181 所以,是的,我需要让地图在我说的任何设备中滑下来

MainActivity:

protected Animation animation;
    protected LinearLayout MapLayout;
    protected EditText edit;
    protected TextView text;

    MapLayout = (LinearLayout)findViewById(R.id.MapLayout);
    edit = (EditText)findViewById(R.id.Recherche);
    text = (TextView)findViewById(R.id.CaptionRecherche);
    Toast.makeText(context, "Height: "+(edit.getHeight()+text.getHeight()), 1000).show();
    animation = new TranslateAnimation(MapLayout.getX(), MapLayout.getY(), MapLayout.getY(), text.getHeight()+edit.getHeight());
    animation.setDuration(1000);
    animation.setFillAfter(true);
    MapLayout.startAnimation(animation);

主XML:

-------我正在使用DrawerLayout ...我在应用程序中有一个幻灯片菜单节目...只是为了您的信息-------

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/DrawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <include
        android:id="@+id/ContenuPrincipal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        layout="@layout/activity_main_relative"
        />
    <!-- ListView... La liste des options du menu -->
       <ListView
            android:id="@+id/Menu"
            android:layout_width="250dp"
            android:layout_height="fill_parent"
            android:choiceMode="singleChoice"
            android:layout_gravity="start"
            android:background="#333"
            android:divider="#666"
            android:dividerHeight="1dp"
            android:paddingLeft="15dp"
            android:paddingRight="15dp"
            />

</android.support.v4.widget.DrawerLayout>

Main2 XML(我上面提到的那个):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:background="#E8E8E8">

            <!-- Champs de saisie pour effectuer la recherche:  -->

        <TextView
            android:id="@+id/CaptionRecherche"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Entrer l'emplacement que vous cherchez: "
            android:textSize="20sp"
            android:layout_marginTop="7dp"
            android:layout_marginLeft="20dp"
            />
        <EditText
            android:id="@+id/Recherche"
            android:layout_width="250dp"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_marginTop="10dp"
            android:hint="Salle, Deparetement..."
            android:layout_marginLeft="20dp"
            android:layout_marginBottom="20dp"
            android:maxLength="100"
            android:maxLines="1" 
            android:layout_below="@id/CaptionRecherche"/>

                <!-- La map:  -->
     <LinearLayout
         android:id="@+id/MapLayout"
         android:layout_width="fill_parent" 
         android:layout_height="fill_parent"
         >

        <fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.MapFragment"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
             />

    </LinearLayout>
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

作为我的应用程序的一部分,我有一个包含一些文本的状态栏。此状态栏将被隐藏,直到用户单击按钮向下滑动(隐藏下面布局的最顶层内容)。

我用来获取隐藏状态栏正确高度的代码:

private int hiddenStatusHeight;
private int currentStatusBarHeight;

private void getStatusBarHeight() {
    final ViewTreeObserver observer = hiddenStatus.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @SuppressLint("NewApi") @SuppressWarnings("deprecation") @Override public void onGlobalLayout() {

            hiddenStatus.measure(MeasureSpec.UNSPECIFIED,
                    MeasureSpec.UNSPECIFIED);
            hiddenStatusHeight = hiddenStatus.getMeasuredHeight();

            currentStatusBarHeight = statusBar.getHeight();

            ViewTreeObserver obs = hiddenStatus.getViewTreeObserver();

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                obs.removeOnGlobalLayoutListener(this);
            } else {
                obs.removeGlobalOnLayoutListener(this);
            }
        }
    });
}

单击按钮时执行的代码:

private OnClickListener ExpandClickListener = new OnClickListener() {

    @Override public void onClick(View v) {
        boolean isExpanded = (Boolean) expandButton
                .getTag(R.id.TAG_EXPANDED);
        int originalHeight = (Integer) expandButton
                .getTag(R.id.TAG_ORIGINAL_HEIGHT);

        if (isExpanded) {
            expandButton.setTag(R.id.TAG_EXPANDED, false);
            expandButton.setImageResource(R.drawable.ic_action_down);
            // statusBar.setLayoutParams(new FrameLayout.LayoutParams(
            // LayoutParams.MATCH_PARENT, originalHeight));
            Log.d(TAG, "Collapsing to " + originalHeight);
            ValueAnimator va = ValueAnimator.ofInt(currentStatusBarHeight,
                    originalHeight);
            va.setDuration(500);
            va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                public void onAnimationUpdate(ValueAnimator animation) {
                    Integer value = (Integer) animation.getAnimatedValue();
                    statusBar.getLayoutParams().height = value.intValue();
                    statusBar.requestLayout();
                }
            });
            va.start();
        } else {
            expandButton.setTag(R.id.TAG_EXPANDED, true);
            expandButton.setImageResource(R.drawable.ic_action_collapse);
            currentStatusBarHeight = originalHeight + hiddenStatusHeight;
            // statusBar.setLayoutParams(new FrameLayout.LayoutParams(
            // LayoutParams.MATCH_PARENT, currentStatusBarHeight + 15));
            Log.d(TAG, "Expanding to " + originalHeight + "+"
                    + hiddenStatusHeight + "=" + currentStatusBarHeight);
            ValueAnimator va = ValueAnimator.ofInt(originalHeight,
                    currentStatusBarHeight);
            va.setDuration(500);
            va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                public void onAnimationUpdate(ValueAnimator animation) {
                    Integer value = (Integer) animation.getAnimatedValue();
                    statusBar.getLayoutParams().height = value.intValue();
                    statusBar.requestLayout();
                }
            });
            va.start();
        }

    }
};

最后我的布局XML(它必须是FrameLayout):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ScrollView
    android:id="@+id/scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="70dp" >

    <LinearLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true"
        android:orientation="vertical"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="8dp"
        android:showDividers="middle" >
    </LinearLayout>
</ScrollView>

<RelativeLayout
    android:id="@+id/displayStatusBar"
    style="@style/DisplayStatusBar"
    android:layout_width="match_parent"
    android:layout_height="65dp" >

    <RelativeLayout
        android:id="@+id/status_always_visible"
        style="@style/StatusBar"
        android:layout_width="match_parent"
        android:layout_height="20dp" >

        <TextView
            android:id="@+id/status_received"
            style="@style/StatusBarText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="@string/received" />

        <TextView
            android:id="@+id/status_time_received"
            style="@style/StatusBarText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/status_received" />

        <TextView
            android:id="@+id/status_time_delete_relative_text"
            style="@style/StatusBarText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/status_time_delete_relative"
            android:text="@string/is_deleted" />

        <TextView
            android:id="@+id/status_time_delete_relative"
            style="@style/StatusBarText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:text="@string/minutes" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/status_hidden"
        style="@style/StatusHidden"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/status_always_visible" >

        <LinearLayout
            android:id="@+id/status_hydrants_near_address_container"
            style="@style/StatusHiddenText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:divider="@android:drawable/divider_horizontal_bright"
            android:orientation="vertical"
            android:paddingLeft="10dp"
            android:showDividers="middle" >

            <TextView
                style="@style/StatusHiddenText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/no_information" />
        </LinearLayout>
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/optionsBar"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="#999"
        android:orientation="horizontal"
        android:paddingTop="5dp" >

        <ImageButton
            android:id="@+id/button_hydrants"
            style="@style/android:Widget.ImageButton"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:alpha="50"
            android:contentDescription="@string/module_hydrants"
            android:src="@drawable/ic_action_place" />

        <ImageButton
            android:id="@+id/button_route"
            style="@style/android:Widget.ImageButton"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:contentDescription="@string/module_directions"
            android:src="@drawable/ic_action_directions" />

        <ImageButton
            android:id="@+id/button_pdf"
            style="@style/android:Widget.ImageButton"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:contentDescription="@string/module_accessplan"
            android:src="@drawable/ic_action_attachment" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <ImageButton
                android:id="@+id/button_more"
                style="@style/android:Widget.ImageButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_alignParentTop="true"
                android:src="@drawable/ic_action_down" />

        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>

<!-- The "empty" view to show when there are no items in the "list" view defined above. -->

<TextView
    android:id="@android:id/empty"
    style="?android:textAppearanceSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:padding="32dp"
    android:text="@string/no_information"
    android:textColor="?android:textColorSecondary" />

</FrameLayout>

希望其中一些可能对您有所帮助。

简单地说,我已经问了一个类似的问题,当菜单扩展时,可见布局被向下推。因此,如果您更想要这种行为,请查看:How to animate a slide in notification view that pushes the content view down

快乐编码