【问题标题】:TranslateAnimation move tomake other views appear翻译动画移动以使其他视图出现
【发布时间】:2015-08-05 10:47:54
【问题描述】:

我正在使用 TranslateAnimation 使片段 (GoogleMap) 向下滑动,从而为 EditText 和 TextView 提供空间以使其可见。 所以我用了这个:

文本:文本视图

编辑:编辑文本

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 的高度,在 Emulator 中显示为:85,在 S3 中显示为 181 所以是的,我需要像我说的那样让地图在任何设备中向下滑动

主活动:

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>

【问题讨论】:

    标签: android translate-animation


    【解决方案1】:

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

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

    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

    愉快的编码

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多