popupwindow设置了消失动画,消失动画结束后有出现了。。。要怎么解决。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了popupwindow设置了消失动画,消失动画结束后有出现了。。。要怎么解决。。相关的知识,希望对你有一定的参考价值。

如题。。。。

参考技术A 我记得动画播放完了默认会回到播放前的状态,所以你要在动画播放完成后dismiss掉PopupWindow,动画播放完成的事件可以监听追问

弱弱的问一下。。。怎么监听。。。我就是不知道监听事件是哪个。。。。

追答

animation.setAnimationListener(new DownViewListener());

private class DownViewListener implements AnimationListener

public void onAnimationEnd(Animation animation)


public void onAnimationRepeat(Animation animation)


public void onAnimationStart(Animation animation)



第一个函数

追问

我用的是setAnimation。。。里面是个int 值。。。弱弱的问一下。。。你这个animation要放在哪用。。。。

追答

这个animation代表的是动画对象

TranslateAnimation tanimation = new TranslateAnimation(_downview.getX(), _downview.getX(), 0.0f, _upviewheight);
tanimation.setDuration(500);
tanimation.setFillAfter(true);
tanimation.setAnimationListener(new DownViewListener());

view.startAnimation(sanimation);

你不是这么使用的么?

追问

其实我是用配置文件写进去的。。。并不是代码。。。那我再看看把,感觉用代码也挺好的

本回答被提问者采纳

你可以在消失时为 SwiftUI 视图设置动画吗?

【中文标题】你可以在消失时为 SwiftUI 视图设置动画吗?【英文标题】:Can you animate a SwiftUI View on disappear? 【发布时间】:2021-01-21 16:30:15 【问题描述】:

我有一个 SwiftUI View,它有一个运行 onAppear 的自定义动画。我也试图让视图动画onDisappear,但它立即消失了。

以下示例重现了该问题 - MyText 视图应从左侧滑入并向右滑出。 id 修饰符用于确保每次值更改时都会呈现一个新视图,并且我已经确认 onAppearonDisappear 确实每次都被调用,但动画 onDisappear 从未明显运行。我怎样才能做到这一点?

struct Survey: View 
  @State private var id = 0

  var body: some View 
    VStack 
      MyText(text: "\(id)").id(id)

      Button("Increment") 
        self.id += 1
      
    
  

  struct MyText: View 
    @State private var offset: CGFloat = -100
    let text: String

    var body: some View 
      return Text(text)
        .offset(x: offset)
        .onAppear() 
          withAnimation(.easeInOut(duration: 2)) 
            self.offset = 0
          
        
        .onDisappear() 
          withAnimation(.easeInOut(duration: 2)) 
            self.offset = 100
          
        
    
  

【问题讨论】:

【参考方案1】:

可能你想要过渡,比如

struct Survey: View 
  @State private var id = 0

  var body: some View 
    VStack 
      MyText(text: $id)

      Button("Increment") 
        self.id += 1
      
    
  

  struct MyText: View 
    @Binding var text: Int
    

    var body: some View 
      return Text("\(text)").id(text)
            .frame(maxWidth: .infinity)
            .transition(.slide)
            .animation(.easeInOut(duration: 2))
    
  

【讨论】:

干得好! :) 但是,关于这个问题,严格来说,这太糟糕了,这在 2021 年的 SwiftUI 中仍然无法原生提供。 也作为后续问题......在子视图中使用绑定有什么好处?无论哪种方式,它似乎都有效。【参考方案2】:

恐怕它无法工作,因为一旦隐藏视图就会调用 .onDisappear 修饰符。 但是这里有一个很好的答案: Is there a SwiftUI equivalent for viewWillDisappear(_:) or detect when a view is about to be removed?

【讨论】:

以上是关于popupwindow设置了消失动画,消失动画结束后有出现了。。。要怎么解决。。的主要内容,如果未能解决你的问题,请参考以下文章

你可以在消失时为 SwiftUI 视图设置动画吗?

XAML 动画:如何使用 BLEND 为用户控件的外观和消失设置动画

为“源输入” globalCompositeOperation 蒙版设置动画时,画布消失

阻止其他活动组件的动画视图

验证装饰器不会在动画中完全消失

Qt动画窗口,Qt之对话框消失动画