【问题标题】:Remove the resize animation on view visibility GONE删除视图可见性上的调整大小动画 GONE
【发布时间】:2018-06-08 13:45:30
【问题描述】:

我正在尝试使用 ViewPager 在 Android 上模拟 iPhone X 导航。当用户释放底部的栏时,viewpager 的可见性设置为View.GONE,并显示出丑陋的下拉式动画,如视频https://youtu.be/k2EXKFulfzU 所示。

我试图通过直接更改 viewpager 的尺寸然后将其可见性更改为 GONE 来删除动画,但这没有帮助。提前谢谢你:)

FrameLayout ll = mLayout.findViewById(R.id.mainLL);
ll.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, final MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    bar.animate().alpha(0.0f);
                    viewPager.setVisibility(View.VISIBLE);

                    layoutParams.height = old_y;
                    viewPager.setLayoutParams(layoutParams);

                    break;
                case MotionEvent.ACTION_UP:
                    Animation a = new Animation() {
                        @Override
                        protected void applyTransformation(float factor, Transformation t) {

                            float factorX = (float)scaleX + factor;

                            int currentPos = viewPager.getCurrentItem();

                            if (currentPos != 0) {
                                adapter.getItem(currentPos - 1).setScaleX(Math.min(factorX, 1));
                                adapter.getItem(currentPos - 1).setScaleY(Math.min(factorX, 1));
                            }

                            adapter.getItem(currentPos).setScaleX(Math.min(factorX, 1));
                            adapter.getItem(currentPos).setScaleY(Math.min(factorX, 1));

                            adapter.getItem(currentPos + 1).setScaleX(Math.min(factorX, 1));
                            adapter.getItem(currentPos + 1).setScaleY(Math.min(factorX, 1));

                            if(adapter.getItem(currentPos).getScaleX() > 0.1) {
                                if(factor == 1){
                                    viewPager.setVisibility(View.GONE);
                                }
                            }


                        }


                    };

                    bar.animate().alpha(1.0f);
                    viewPager.setVisibility(View.GONE);
                    a.setDuration(zoomInDuration);
                    viewPager.startAnimation(a);
                    break;

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/navigationLayout"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:animateLayoutChanges="false"
    android:orientation="vertical">


    <com.thanoscorp.uigestures.ViewPager.ViewPager
        android:id="@+id/appViewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:visibility="gone" />

    <LinearLayout
        android:id="@+id/barLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/overlayBar"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_gravity="top"
            android:paddingLeft="100dp"
            android:paddingRight="100dp"
            android:src="@mipmap/bar"
            android:tint="#FF0000" />

    </LinearLayout>
    
</FrameLayout>

【问题讨论】:

  • 发布一些代码,否则很难提出修复建议
  • @elmorabea 已更新代码
  • 尝试使用 withEndAction 并在操作中更改项目的可见性。允许动画运行,然后使用 withEndAction 或 withStartAction 设置结束可见性值
  • 我认为你所说的与我在函数applyTransformation 中所做的类似,当 interpolatedTime 即因子达到最大值 1,可见性被设置为 GONE

标签: java android


【解决方案1】:

我无法摆脱动画,相反,我创建了另一个布局并使用 wm.addView(vpLayout, lp); 将其添加到窗口管理器并使用 wm.removeView(vpLayout); 将其删除

如果您想知道vpLayout 是什么,我已将 ViewPager 分离到另一个布局文件中,并将其扩展为名称为 vpLayoutFrameLayout。这花了一些时间,这是值得的,但它产生了一个新的问题。希望我也能解决。谢谢:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 2013-06-07
    • 2014-08-18
    • 2015-06-16
    • 2015-01-04
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多