Android 下一步&;以前的动画
我制作了一个Android 下一步&;以前的动画,android,animation,popupwindow,gestures,Android,Animation,Popupwindow,Gestures,我制作了一个PopupWindow,当用户选择列表中的项目时,它会弹出。然后,当他在弹出窗口上向左和向右滑动时,数据(在弹出窗口中)将分别更改为列表中的上一项和下一项 我这样做的目的是,当用户将手指向右滑动(“下一个”动作)时,当当前弹出窗口从屏幕右侧消失时,一个新的弹出窗口从左侧滑入。“先前”动议的情况也一样 但问题是,由于我为这两个动画制作了两种样式(从左到中,从中到右,从右到中,从中到左),而且当用户向右(“下一步”)然后向左(“上一步”)滑动时,PopupWindows在显示时不会得到更
PopupWindow
,当用户选择列表中的项目时,它会弹出。然后,当他在弹出窗口上向左和向右滑动时,数据(在弹出窗口中)将分别更改为列表中的上一项和下一项
我这样做的目的是,当用户将手指向右滑动(“下一个”动作)时,当当前弹出窗口从屏幕右侧消失时,一个新的弹出窗口从左侧滑入。“先前”动议的情况也一样
但问题是,由于我为这两个动画制作了两种样式(从左到中,从中到右,从右到中,从中到左),而且当用户向右(“下一步”)然后向左(“上一步”)滑动时,PopupWindow
s在显示时不会得到更新,当两个动画重叠时,动画看起来会有起伏。当再次反向滑动时,也会发生同样的情况
现在,如果我在更改动画后调用update()
,它将再次滑入中间。那更糟。那么,我能做些什么来实现我想要的行为呢
谢谢
编辑:源代码
以下是我第一次用来显示弹出窗口的代码:
popup1 = new PopupWindow(popupLayout, popup_width, popup_height, true);
popup1.setAnimationStyle(R.style.AnimationPopup);
popup1.showAtLocation(this.findViewById(R.id.main_container), Gravity.CENTER, 0, 0);
这是next()
方法的代码:
if(popup2 != null) popup1 = popup2;
if(popup1 != null) {
popup2 = new PopupWindow(popupLayout, popup_width, popup_height, true);
popup2.setAnimationStyle(R.style.AnimationPopup);
popup1.dismiss();
popup2.showAtLocation(rootLayout, Gravity.CENTER, 0, 0);
}
if(popup2 != null) popup1 = popup2;
if(popup1 != null) {
popup2 = new PopupWindow(popupLayout, popup_width, popup_height, true);
popup2.setAnimationStyle(R.style.AnimationPopupReverse);
popup1.setAnimationStyle(R.style.AnimationPopupReverse);
popup1.dismiss();
popup2.showAtLocation(rootLayout, Gravity.CENTER, 0, 0);
}
这是prev()
方法的代码:
if(popup2 != null) popup1 = popup2;
if(popup1 != null) {
popup2 = new PopupWindow(popupLayout, popup_width, popup_height, true);
popup2.setAnimationStyle(R.style.AnimationPopup);
popup1.dismiss();
popup2.showAtLocation(rootLayout, Gravity.CENTER, 0, 0);
}
if(popup2 != null) popup1 = popup2;
if(popup1 != null) {
popup2 = new PopupWindow(popupLayout, popup_width, popup_height, true);
popup2.setAnimationStyle(R.style.AnimationPopupReverse);
popup1.setAnimationStyle(R.style.AnimationPopupReverse);
popup1.dismiss();
popup2.showAtLocation(rootLayout, Gravity.CENTER, 0, 0);
}
这就是Java代码的全部内容。AnimationPopup
是一个XML,它简单地从右到中显示幻灯片,并隐藏从中到左的幻灯片动画。而animationpopurpreverse
与上述动画相反
我已经提供了我的第一次尝试的代码。在这里,更改的动画在显示一个以上的弹出窗口后生效。一个简单的解决方案是:
android:duration=“@android:integer/config\u mediumAnimTime”
使其变得非常标准和快速您还可以实现某种类型的拖动: 捕捉触摸事件并相应地更改弹出窗口的位置。当用户移开手指时,要么快速滑动,要么显示下一个/上一个弹出窗口。这实际上会让人挠头
最好使用一个ViewPager,它只显示弹出窗口,并实现所有刷卡功能: 例如:
yourViewPager.setAdapter(new PagerAdapter() {
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view;
//intialise view to a PopupWindow or some Layout with a PopupWindow in the location you want
container.addView(view, 0);
return view;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return (view==object);
}
@Override
public int getCount() {
//return the count
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public void finishUpdate(ViewGroup arg0) {
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(ViewGroup arg0) {
}
});
如果在应用程序标记下的清单中使用android:hardwareAccelerated=“true”,所有动画看起来都会更干净。即使是常规的左/右滑动动画,在没有硬件加速的情况下也会出现起伏。如果您只需要滑动动画,则可以在弹出窗口中充气查看寻呼机。@shreshas正如我在问题中所述,我已使幻灯片工作,但动画应根据滑动(手势)方向动态反转。否则,它可以正常工作。那么您遇到的问题只是性能问题?你是如何让动画和弹出窗口一起工作的?我认为你应该发布一些代码来提供更多的细节。你记得在清单中使用android:hardwareAccelerated=“true”?@Warpzit不,这会有所不同吗?我很快会发布一些代码。回答得很好!你的第一个解决方案有点奏效。不完全是我想的,但现在我有了一个有趣的效果。非常感谢……)很好的解决方案…+1虽然对我来说感觉像:“你可以使用三星S3,它将不再是波涛汹涌的”@SherifelKhatib ye我的S3没有它就无法制作出正确的动画。