Java 删除视图可见性消失时的调整动画
我正在尝试使用ViewPager在Android上模拟类似iPhone X的导航。当用户释放底部的栏时,viewpager的可见性设置为Java 删除视图可见性消失时的调整动画,java,android,Java,Android,我正在尝试使用ViewPager在Android上模拟类似iPhone X的导航。当用户释放底部的栏时,viewpager的可见性设置为View.GONE,并显示丑陋的下拉列表,如视频中所示 我试图通过直接更改viewpager的尺寸,然后将其可见性更改为GONE来删除动画,但没有任何帮助。提前感谢:) 我无法摆脱动画,相反,我创建了另一个布局,并使用wm.addView(vpLayout,lp)将其添加到窗口管理器中
View.GONE
,并显示丑陋的下拉列表,如视频中所示
我试图通过直接更改viewpager的尺寸,然后将其可见性更改为GONE来删除动画,但没有任何帮助。提前感谢:)
我无法摆脱动画,相反,我创建了另一个布局,并使用
wm.addView(vpLayout,lp)将其添加到窗口管理器中使用wm.removeView(vpLayout)将其删除代码>
如果您想知道什么是vpLayout
,我已经将ViewPager分离到另一个布局文件中,并将其膨胀到一个名为vpLayout
的FrameLayout
。花了一段时间,这是值得的,但它产生了一个新的问题。希望我也能解决它。谢谢:)发布一些代码,很难提出解决方案otherwise@elmorabea使用withEndAction并在操作中更改项目的可见性,使用codeTry进行更新。允许动画运行,然后使用withEndAction或StartAction设置end visibility值我认为您所说的与我在函数中所做的类似applyTransformation
当插值时间(即系数)达到其最大值1时,可见性设置为消失
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;