Xamarin.Form 下拉刷新动画

好像园子里对 Xamarin 感兴趣的人很少啊...

来, 先给各位爷们逗个笑, 本山大爷本色出演:

照例, 上源码:

https://github.com/gruan01/ListViewExtend

目前只有 WP 的效果, Android 还在研究, IOS 的还没计划.

------------------------------------------------------

Xamarin.Form 的 ListView 只支持下拉刷新 (这里有用法), 上拉 加载更多 没有对应的事件. 这个先放一边, 今天先说说 WP 下, ListView 的下拉动画效果的替换.

用反编译工具查看 ListViewRenderer

OnElementChanged 中, 声明了一个 FixedLongListSelector 的控件, 然后将这个控件设为 NativeControl, 并对这个控件的 PullToRefreshXXXX 事件设置处理程序.

我的目的很简单, 就是替换掉下拉动画. 所以这几个事件必定是入口点.

FixedLongListSelector 继承自 LongListSelector, 很不幸, 它是 internal 的! 不过没关系, 用反射也很容易.

用反射清理/新增事件处理程序: 

private void ClearEventHandlers(object obj, string evtName) {
            var t = obj.GetType();
            //var fs = t.GetFields(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);

            var evt = t.GetEvent(evtName);
            var f1 = t.GetField(evtName, BindingFlags.NonPublic | BindingFlags.Instance);
            if (evt != null && f1 != null) {
                var handler = (EventHandler)f1.GetValue(obj);
                var ds = handler.GetInvocationList();
                evt.RemoveEventHandler(obj, handler);
            }
        }

        private void AddEventHandler(object obj, string evtName, Delegate handler) {
            var t = obj.GetType();
            var evt = t.GetEvent(evtName);
            evt.AddEventHandler(obj, handler);
        }

昨天有个面试的说他用的很多反射, 我随口就问了如何用反射清理已存在的事件处理程序, 并新增自已的处理程序, 小伙闸想了半天没回答上来 , 我是不是有点那个啊...

能清理和新增事件处理程序还不够, WP 的 LongListSelector 不自带下拉动画效果, XF 是通过新增一个 ProgressBar 来做的这个效果, 如下:

这个 ProgressBar 默认是不可见的 (progressBar.Visibility = Visibility.Collapsed;), PullToRefreshXXXX事件的处理程序会跟据相关的属性, 对这个 ProgressBar 做更新, 已达到上面图上所示的动画效果.

知道了这些, 那就好办了, 我们额外定义一个 ListView 的渲染器:

https://github.com/gruan01/ListViewExtend/blob/master/ListViewExtend/ListViewExtend.WinPhone/Renders/ListViewRender.cs

自己声明一个 UIElement 对象, 通过 this.Children.Add(xxx) , 添加进来, 然后在自己的事件处理程序里对这个对象做动画播放与停止.

 1 protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.ListView> e) {
 2     base.OnElementChanged(e);
 3     ...
 4     ...
 5     this.Grid.Children.Add(this.Viewbox);
 6     this.Viewbox.Child = this.Border;
 7     this.Children.Add(this.Grid);
 8     ...
 9     this.SB = new SA.Storyboard() {
10         Duration = new Duration(TimeSpan.FromMilliseconds(1000)),
11         AutoReverse = true,
12         RepeatBehavior = SA.RepeatBehavior.Forever
13     };
14     ...
15     ...
16     this.OverrideEvents();
17 }
        private void UpdateIsRefreshing() {
            this.Grid.Visibility = this.Element.IsRefreshing ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
            if (this.Element.IsRefreshing)
                this.SB.Begin();
            else
                this.SB.Stop();
        }

代码很简单, 其它部分不在在赘述.

动画效果丑了点, 只做参考..

另外, 反编译了一下 Android 的 ListViewRenderer,  它的下拉刷新是通过 SwipeRefreshLayout 来实现的.

这个控件自带动画效果. 搜了一下, 好像它不能重写动画, 只能设置几个颜色....这就不好办了...

时间: 2024-11-10 00:53:12

Xamarin.Form 下拉刷新动画的相关文章

Android UI- PullToRrefresh自定义下拉刷新动画

Android UI- PullToRrefresh自定义下拉刷新动画 如果觉得本文不错,麻烦投一票,2014年博客之星投票地址:http://vote.blog.csdn.net/blogstar2014/details?username=wwj_748#content 本篇博文要给大家分享的是如何使用修改开源项目PullToRrefresh下拉刷新的动画,来满足我们开发当中特定的需求,我们比较常见的一种下拉刷新样式可能是以下这种: 就是下拉列表的时候两个箭头上下翻转,更改日期文本和刷新状态,

Android源码解析--超好看的下拉刷新动画

本篇博客代码下载地址:https://github.com/Yalantis/Taurus 最近在github上看到了好多高端.大气.上档次的动画效果,如果给你的项目中加上这些动画,相信你的app一定很优秀,今天给大家分析一下来自Yalantis的一个超好看的下拉刷新动画. 首先我们看一下效果如何: 怎么样?是不是很高大上?接下来我们看一下代码: 一.首先我们需要自定义刷新的动态RefreshView(也就是下拉时候的头) 1.初始化头所占用的Dimens private void initia

Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)

PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/45022595 一,定义刷新动画的layout 在library下的com.handmark.pulltorefresh.library.internal包中的FlipLoadingLayout和RotateLoadingLayout FlipLoadingLayout为ios风格的箭头颠倒的刷新动画

Android自定义下拉刷新动画--仿百度外卖下拉刷新

好久没写博客了,小编之前一段时间一直在找工作,从天津来到了我们的大帝都,感觉还不错.好了废话不多说了,开始我们今天的主题吧.现如今的APP各式各样,同样也带来了各种需求,一个下拉刷新都能玩出花样了,前两天订饭的时候不经意间看到了"百度外卖"的下拉刷新,今天的主题就是它–自定义下拉刷新动画. 看一下实现效果吧: 动画 我们先来看看Android中的动画吧: Android中的动画分为三种: Tween动画,这一类的动画提供了旋转.平移.缩放等效果. Alpha – 淡入淡出 Scale

快速下拉刷新动画

-(void)setupTableview{ //添加下拉的动画图片 //设置下拉刷新回调 [self.tableView addGifHeaderWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; //设置普通状态的动画图片 NSMutableArray *idleImages = [NSMutableArray array]; for (NSUInteger i = 1; i<=60; ++i) { // U

下拉刷新动画研究

昨天公司提了一个需求.说是要有自己特色的下拉刷新上拉载入很多其它,随后就去万能的github上面看看自己之前存过的那些.偶然间看到这个Android-AnimatePullToRefreshListView,这玩意能够使用gif图片或者帧动画去运行headview动画载入,而且是基于chrisbanes的Android-PullToRefresh,这样还方便与我项目无缝衔接 上一张效果图 大体上简单说明下: 1.gif与帧动画播放採用的是android-gif-drawable 2.主题上是改动

用贝塞尔曲线做的一个下拉刷新动画

以前就一直觉得ios 上的 mail 的下拉刷新的动画非常酷炫,但是一直不知道那种"滴虫"效果是怎么实现的.直到前段时间看到的贝塞尔曲线,感觉很神奇.如下图: 看起来和滴虫动画有点像,然后就花了点时间做了一个下拉刷新出来. 项目地址:https://github.com/ufo22940268/DropRefreshView 欢迎围观

PullToRrefresh自定义下拉刷新动画

首先,下载著名的刷新框架https://github.com/chrisbanes/Android-PullToRefresh,其中simple为demo,library和extras作为项目包导入到simple中 一,定义刷新动画的layout 在library下的com.handmark.pulltorefresh.library.internal包中的FlipLoadingLayout和RotateLoadingLayout FlipLoadingLayout为ios风格的箭头颠倒的刷新动

一款Android开源的下拉刷新动画

无意间在GitHub看到的,就Down了下来.但是作者是用AndroidStudio开发的,这边移动Eclipse供小伙伴们下载使用. 截图 这么好的东西因为字数不够不让分享,得了,贴段代码吧 package com.example.pullrefersh; import android.content.Context; import android.content.res.TypedArray; import android.support.v4.view.MotionEventCompat;