编程实战——电影管理器之界面UI及动画切换
编程实战——电影管理器之界面UI及动画切换
在前文“编程实战——电影管理器之利用MediaInfo获取高清视频文件的相关信息”中提到电影管理器的目的是方便播放影片,在想看影片时不需要在茫茫的文件夹下找寻。
我对电影管理器的想法如下:
1、可以全键盘操作(不依赖鼠标),最好是利用键盘上的小数字键区就能完成全部操作。
2、基于HTPC的全屏操作,故软件的大小为1920*1080
3、模仿时下流行的“磁贴”效果。
下图是本软件的初步的界面UI
解释一下:
1、HTPC的屏幕是1920*1080,在软件设计的时候,由于电脑的屏幕没那么大,初步设计为960*540,等调试完全没有问题后,再将分辨率调成1920*1080。
2、整个屏幕分为上下两个部分。上部是类别信息(上图中顶部的黑条,目前是空在那儿),下部是电影信息的磁贴
3、磁贴一共3*3=9个,分别用1-9标示,对应小数字键盘上的数字键,设想是按相应的数字键,调用系统播放器播放相应的影片
4、由于电影的数量众多,利用数字小键盘区上的/、*键实现电影列表的左右切换;利用-、+键实现电影列表的上下切换
现在的流行的UI,在列表切换的时候,都会有一段动画的切换效果,以避免呆板的效果。
下面就给出动画切换的实现代码
Dim I As Integer
Dim X As Integer
Dim Steps As Integer = 35
_IsDrawing = True
_G.SetClip(New Rectangle(0, 30, 960, 510))
For I = 0 To Steps
X = Int((Math.Cos(I / Steps * Math.PI) - 1) * 480 + 0.5)
_G.DrawImageUnscaled(Bmp1, X, 30)
_G.DrawImageUnscaled(Bmp2, X + 960, 30)
PrivatePaint()
'Threading.Thread.Sleep(20)
Next
_G.ResetClip()
_IsDrawing = False
End Sub
首先,将要切换的2个电影列表绘到2个Bitmap对象(上面的代码没有显示描绘的代码,作为参数传入到方法中)。
所谓的动画,就是把动画拆成若干步,然后把每一步绘制到界面上,在每一步中间加上Threading.Thread.Sleep(20),使动画在不同的机器上动画的时间不会相差太大。
不过上面的代码,有这几个问题,不太好解决。写在这也是向网友求教,看看有没有啥好的解决方法
1、加上Threading.Thread.Sleep(20)后,在参数大于20,有频闪的现象。我已经用了双缓冲技术,_G就是在内存中开辟的缓冲区,在绘图完成后,用PrivatePaint方法把_G的内容绘制到WinForm上
2、把这句话注释后,虽然动画看起来快了很多,但是动画很流畅,没有频闪的现象。不过在Steps参数改成超过40后,还是有一丝闪烁。
有网友能给出比较好的VS的动画教程么?也考虑到也许用Directx.Direct2D实现动画效果比较好,只是相关的资料找寻比较少而作罢。
曾经考虑用WPF实现动画,不过相关的资料找寻比较少而作罢。不过WPF和WP7、WP8、IOS、Android等技术相似度比较高。在本软件的首个版本开发后,可以考虑用WPF技术再开发一个版本
编程实战——电影管理器之界面UI及动画切换的更多相关文章
- 编程实战——电影管理器之XML存储电影信息数据
但凡管理器之类的软件,存储数据是必不可少的.存储数据的话,有几种选择.一是用数据库,把数据存储到数据库里:一是用文本文件,把数据存储到文本文件里:一种是利用XML文件,把数据对象转换为XML后,存储到 ...
- 编程实战——电影管理器之利用MediaInfo获取高清视频文件的相关信息
随着高速(20M)宽带.HTPC.大容量硬盘(3T)的普及,下载高清片并利用大屏幕观看也成为普通的事情. 随着下载影片的增多,管理就有了问题,有时在茫茫文件夹下找寻一个影片也是一件费时费力的事. 于是 ...
- 电影管理器之XML存储电影信息数据
电影管理器之XML存储电影信息数据 但凡管理器之类的软件,存储数据是必不可少的.存储数据的话,有几种选择.一是用数据库,把数据存储到数据库里:一是用文本文件,把数据存储到文本文件里:一种是利用XML文 ...
- ACtivity实现欢迎界面并添加动画切换效果
先看效果: 中间切换动画没来得及截图,凑合着看吧. 主要是java代码的实现: Welcom.java package kehr.activity.welcome; import android.ap ...
- 10、会话管理/编程实战分析/Jsp
1 会话管理回顾 会话管理 1)会话管理: 管理浏览器和服务器之间的会话过程中产生的会话数据 2)Cookie技术: 会话数据保存在浏览器客户端. Cookie核心的API: 2.1 在服务器端创建C ...
- 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) ...
- 三十三、Java图形化界面设计——布局管理器之null布局(空布局)
摘自http://blog.csdn.net/liujun13579/article/details/7774267 三十三.Java图形化界面设计--布局管理器之null布局(空布局) 一般容器都有 ...
- 三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)
摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网 ...
- Linux下的编程实战【转】
一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...
随机推荐
- 健身小管家--android app源码
把做了近一个月的android程序源码放出来,里面包括但不限于如下内容: 1. 简单的android项目结构 2. 通用的adapter,不再为每一个ListView都写一个adapter,只要用此一 ...
- (转)iOS项目的目录结构和开发流程
网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法. 目录结构 AppDelegate Models Macro General ...
- Java发送get及post请求工具方法
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数
在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中, ...
- jquery插件分类与编写详细讲解
jquery插件分类与编写详细讲解 1. 插件种类 插件其实就是对现有的方法(或者叫函数)做一个封装,方便重用提高开发效率. jQeury主要有2种类型 1)实例对象方法插件 开发能让所有的j ...
- PHP 12 :字符串的操作
原文:PHP 12 :字符串的操作 本章介绍字符串的操作.之所以要把字符串单独拿出来讲,是因为字符串在每种语言里都是非常重要的.并且也是大家关心的.我们从以下几个方面介绍字符串: 字符串的表现形式. ...
- hdu2899 Strange fuction
在区间(0,100).在恒大二阶导数0.f(x)有极小值.用的最低要求的一阶导数值点: #include<math.h> #include<stdio.h> #include& ...
- 利用sqlclr实现数据库服务器端数据加密解密
在公司中一同事用sqlclr写数据迁移自动化执行脚本,发现他在执行脚本时对数据进行了加密. 个人觉得利用sqlclr对数据进行加密是一个解决数据网络安全传输的不错的方案. 以下是一个小的案例: --- ...
- Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?
Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射? 写在前面 阅读目录: 设计误区 数据库已死 枚举映射 关联映射 后记 在上一篇<一缕阳光:D ...
- open打开窗口并且获得打开窗口的窗口对象
//主窗体 <script language="javascript" type="text/javascript"> function opens ...