【发布时间】: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