UWP中实现大爆炸效果(一)
自从老罗搞出大爆炸之后,各家安卓都内置了类似功能。UWP怎么能落下呢,在这里我们就一起撸一个简单的大爆炸实现。
闲话不说,先上效果:

因为代码太多,所以我打算写成一个系列,下面是第一篇的正文:
首先,我们构思一下BigbangView需要哪些部分:
1、一个能多选的控件;
2、一个能给Item布局的面板;
3、选中之后出现的Header和Footer。
这里我们先来实现第二项,BigbangPanel。
BigbangPanel继承自Panel,重载MeasureOverride和ArrangeOverride方法。
MeasureOverride实现调用此方法以形成递归布局更新;
ArrangeOverride为其子元素实现自定义布局的父对象应从其布局重写实现调用此方法以形成递归布局更新。
我们对面板子元素布局的思路是,遍历子元素,从左到右依次排列,若当前行子元素总宽度超过Panel宽度,则换一行从头继续排列。
(在此我们只实现一个简单版,不考虑子元素的VerticalAlignment)
protected override Size MeasureOverride(Size availableSize)
{
foreach (var child in Children)
{
child.Measure(availableSize);
} double width = 0d, height = 0d;
double col_width = 0d, row_height = 0d;
int end_row_count = -1; for (int i = 0; i < Children.Count; i++)
{
if (Children[i].DesiredSize.Width + col_width > availableSize.Width)
{
end_row_count = i;
height += row_height;
width = Math.Max(width, col_width);
col_width = 0;
row_height = 0;
}
col_width += Children[i].DesiredSize.Width;
row_height = Math.Max(row_height, Children[i].DesiredSize.Height);
} //计算最后一行
if (end_row_count != -1)
{
col_width = 0;
row_height = 0;
for (int i = end_row_count; i < Children.Count; i++)
{
row_height = Math.Max(row_height, Children[i].DesiredSize.Height);
col_width += Children[i].DesiredSize.Width;
}
height += row_height;
width = Math.Max(width, col_width);
} return new Size(width, height);
}
protected override Size ArrangeOverride(Size finalSize)
{
double x = 0d, y = 0d;
double items_height = 0d;
int end_count = -1;
int row_start_index = 0; for (int i = 0; i < Children.Count; i++)
{
if (Children[i].DesiredSize.Width + x > finalSize.Width)
{
x = 0;
y += items_height; items_height = 0;
end_count = i;
row_start_index = i;
}
Children[i].Arrange(new Rect(x, y, Children[i].DesiredSize.Width, Children[i].DesiredSize.Height));
x += Children[i].DesiredSize.Width;
items_height = Math.Max(items_height, Children[i].DesiredSize.Height);
}
return finalSize;
}
现在可以测试一下,新建一个页面,添加一个ListView,修改ListView的ItemsPanel
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<control:BigbangPanel >
<control:BigbangPanel.ChildrenTransitions>
<TransitionCollection>
<AddDeleteThemeTransition />
</TransitionCollection>
</control:BigbangPanel.ChildrenTransitions>
</control:BigbangPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
后台代码:
public sealed partial class BigbangPage : Page
{
public BigbangPage()
{
this.InitializeComponent();
for(int i = 0; i < 50; i++)
{
list.Add(rnd.Next(100000).ToString());
}
} public static Random rnd = new Random();
ObservableCollection<string> list { get; set; } = new ObservableCollection<string>();
}
然后设置ListView的ItemSource="{x:Bind list}",然后我懒得新建个项目截图了,大佬们自行测试一下吧。
下集预告:实现可以选中的BigbangView
UWP中实现大爆炸效果(一)的更多相关文章
- UWP中实现大爆炸效果(二)
上一回实现了一个宽度不均匀的Panel,这次我们编写一个简单的BigbangView主体. 首先创建一个模板化控件,删掉Themes/Generic.xaml中的<Style TargetTyp ...
- UWP 大爆炸你个锤子
今天看到 叫我蓝火火 s的 UWP中实现大爆炸效果(一) ,我也来说一下我的app [小薇自然语言处理]实现的大爆炸技术. 看一下效果先. 我的控件是基于wrappanel的,正如蓝火火说的,这样看 ...
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果
目前Android的实现是:有来电时,音乐声音直接停止,铃声直接直接使用设置的铃声音量进行铃声播放. Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果. 如果 ...
- [一位菜鸟的COCOS-2D编程之路]打飞机中机种敌机和战机损毁时的爆炸效果
1.第一步,添加爆炸动画 //添加玩家飞机飞行动画 id _playerFlyAction; id _playerBlowupAnimation; //战机爆炸动画 id _enemyBlowupAn ...
- 飞流直下的精彩 -- 淘宝UWP中瀑布流列表的实现
在淘宝UWP中,搜索结果列表是用户了解宝贝的重要一环,其中的图片效果对吸引用户点击搜索结果,查看宝贝详情有比较大的影响.为此手机淘宝特意在搜索结果列表上采用了2种表现方式:一种就是普通的列表模式,而另 ...
- 将 UWP 中 CommandBar 的展开方向改为向下展开
在 UWP 中使用 CommandBar 来迅速添加一组功能按钮是非常迅速的,是 UWP 中推荐的交互方案之一.也许你能见到 CommandBar 按你所需向下展开,不过可能更多数情况会看到 Comm ...
- jQuery 打气球小游戏 点击气球爆炸效果
最近在学习前端,看到偶尔看到前端小游戏,就想自己写一个小游戏,奈何水平有限,只能写打气球这种简单的,所有的气球都是动态生成的,气球的颜色也是随机的 html部分 <div class=" ...
- UWP中的消息提示框(一)
不管什么平台,应用内难免会出现一些消息提示框,下面就来聊聊我在UWP里用到的消息提示框. 弹窗也可按是否需要用户操作促发一些逻辑进行分为两大类. 不需要用户干涉的一类: MessageDialog:操 ...
- 【CSS】398- 原生JS实现DOM爆炸效果
爆炸动效分享 前言 此次分享是一次自我组件开发的总结,还是有很多不足之处,望各位大大多提宝贵意见,互相学习交流. 分享内容介绍 通过原生js代码,实现粒子爆炸效果组件 组件开发过程中,使用到了公司内部 ...
随机推荐
- windows环境下zookeeper安装和使用
一.简介 zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...
- Python小游戏之 - 飞机大战美女 !
用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...
- Open Source BI Platform List
资源入口: awesome-business-intelligence https://github.com/thenaturalist/awesome-business-intelligence h ...
- Spring MVC “404 Not Found”错误的解决
一般这个问题发生的原因不会出在Web.xml配置文件的Servlet URL映射部分,因为这个URL映射做JavaWeb的人经常配置不会发生错误,而且此处的这个映射自由度很大,可以有目录字符串,也可以 ...
- Zookeeper简介和安装(二)
一.简介: Zookeeper是一个分布式协调服务,提供的服务如下: 命名服务:类似于DNS,但仅对于节点 配置管理:服务配置信息的管理 集群管理:Dubbo使用Zookeeper实现服务治理 分布式 ...
- PHP判断客户端是否使用代理服务器及其匿名级别
要判断客户端是否使用代理服务器,可以从客户端所发送的环境变量信息来判断. 具体来说,就是看HTTP_VIA字段,如果这个字段设置了,说明客户端使用了代理服务器. 匿名级别可以参考下表来判断. 给出一个 ...
- windows开发的python移植到linux的问题
2016年1月28日 这个问题已经自己解决 file-setting下 左侧code style line separator下拉选择unix就可以了 我在windows上开发的python想移 ...
- 学习Android过程中的一些博客或工具收集
android studio中使用SlidingMenu: 超简单Android Studio导入第三方库(SlidingMenu)教程绝对傻瓜版 android 更新sdk23以后,报错提示Floa ...
- PAT1115:Counting Nodes in a BST
1115. Counting Nodes in a BST (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...
- javascript中的隐式类型转化
javascript中的隐式类型转化 #隐式转换 ## "+" 字符串和数字 如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作. 如果其中一个操作数是对 ...