删除视图可见性GONE上的调整大小动画

时间:2018-06-08 13:45:30

标签: java android

我正在尝试使用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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

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

将其删除

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