当前位置:  编程技术>移动开发
本页文章导读:
    ▪metro运用中页面渐入效果(透明度)        metro应用中页面渐入效果(透明度)在自定义的Page或者基类LayoutAwarePage(如果继承了这个类的话)的OnNavigateTo事件中,可以定义这么一个动画效果: 修改页面的透明度,从透明渐变为不透明。 建.........
    ▪ 在haXe中实现文件下传        在haXe中实现文件上传 研究了一下haXe中的文件上传,因为nme的cpp(neash)库中缺失FileReference类,因此只能采用URLRequest+URLLoader的方式来上传文件。 这里的关键是要请求中采用HTTP协议中标准的multi.........
    ▪ 【OpenGL】懂得GL_TRIANGLE_STRIP等绘制三角形序列的三种方式       【OpenGL】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式转载于:http://blog.csdn.net/xiajun07061225/article/details/7455283 GL_TRIANGLE_STRIP绘制三角形方式很多时候令人疑惑,在这里对其运作机理进行解释.........

[1]metro运用中页面渐入效果(透明度)
    来源: 互联网  发布时间: 2014-02-18
metro应用中页面渐入效果(透明度)

在自定义的Page或者基类LayoutAwarePage(如果继承了这个类的话)的OnNavigateTo事件中,可以定义这么一个动画效果:

修改页面的透明度,从透明渐变为不透明。

建议尽量使用基于LayoutAwarePage(基本页)的页面Page,因为许多导航的功能以及页面生命周期的管理都已经封装得比较完善了。在页面的跳转过程中,利用其提供的LoadState()和SaveState()可以做页面参数的传递以及缓存。

说偏了,下面是一个比较简单的动画效果:

        /// <summary>
        /// 创建进入视图时的渐变动画
        /// </summary>
        private void ShowNavigationStoryBoard()
        {
            Storyboard story = new Storyboard();
            DoubleAnimation animation;

            animation = new DoubleAnimation();
            animation.From = 0.3;
            animation.To = 1;
            animation.Duration = new Duration(TimeSpan.FromMilliseconds(300));
            Storyboard.SetTarget(animation, this);
            Storyboard.SetTargetProperty(animation, new PropertyPath("(UIElement.Opacity)").Path);
            story.Children.Add(animation);

            story.Begin();
        }

其中,ShowNavigationStoryBoard()这个方法我写到了OnNavigateTo事件里面。




    
[2] 在haXe中实现文件下传
    来源: 互联网  发布时间: 2014-02-18
在haXe中实现文件上传

研究了一下haXe中的文件上传,因为nme的cpp(neash)库中缺失FileReference类,因此只能采用URLRequest+URLLoader的方式来上传文件。

这里的关键是要请求中采用HTTP协议中标准的multipart/form-data的方式来编码POST数据,这样可以在一次请求中向服务器端提交多个参数,同时上传多个文件,且文件名等信息也包含在请求数据中。

服务器端是很简单的用tomcat6.0和一个jsp页面,使用commons-FileUpload来实现上传。请注意当前版本的FileUpload依赖于commons-IO,从commons.apache.org官网下载这两个库的最新发布jar包并放到tomcat的lib目录下即可。

下面贴代码:

 

=============== 客户端haXe代码 ================

 

  //要上传的文件路径

  #if android
  var path = "/data/media/lockscreen/lockscreen_003.jpg";
  #else
  var path = "D:/tmp/test.jpg";
  #end
  
  var idx = path.lastIndexOf("/");
  var filename = path.substr(idx + 1);  // 不含路径信息的文件名
  
  var upload = new URLRequest("http://192.168.1.88:8080/upload.jsp"); //上传页面地址
  upload.method = URLRequestMethod.POST;
  upload.contentType = "multipart/form-data; boundary=ABCD"; //此处请参考multipart/form-data编码规范
  var data = new ByteArray();

  //后面开始编码POST数据,请注意所有的换行符"\r\n"(即CRLF)都是必不可少的
  data.writeUTFBytes("--ABCD\r\n");
  data.writeUTFBytes("Content-Disposition: form-data; name=\"file\"; filename=\"" + filename + "\"\r\n"); // 文件名
  data.writeUTFBytes("Content-Type: image/jpeg\r\n"); //文件mime类型
  data.writeUTFBytes("\r\n");
  data.writeBytes(ByteArray.fromBytes(File.getBytes(path))); // 文件原始数据
  data.writeUTFBytes("\r\n");
  data.writeUTFBytes("--ABCD\r\n");
  data.writeUTFBytes("Content-Disposition: form-data; name=\"test\"\r\n"); // 模拟一个html form中的请求参数
  data.writeUTFBytes("\r\n");
  data.writeUTFBytes("testValue\r\n"); //参数的值
  data.writeUTFBytes("--ABCD--\r\n"); // multipart/form-data结束标志
  upload.data = data;
  upload.verbose = true;
  var uploadLoad = new URLLoader();
  uploadLoad.addEventListener(Event.COMPLETE, function(_) { trace("completed, data=" + uploadLoad.data); } );
  try {
    uploadLoad.load(upload);
  } catch (error: SecurityError) {
    trace("A SecurityError has occurred.");
  }

=============== 服务端jsp代码 ================

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page contentType="text/html; charset=GBK" language="java" pageEncoding="GBK" %>
<%@ page import="java.io.*, java.util.*, util.*, org.apache.commons.fileupload.*" %>
<%
    HashMap map = new HashMap();
    try {
        DiskFileUpload fu = new DiskFileUpload();
        fu.setSizeMax(1024 * 1024 * 4);
        fu.setSizeThreshold(4096);
        // 设置临时目录:
        fu.setRepositoryPath("C:/tmp/");

        List fileItems = fu.parseRequest(request);
        for (Iterator i = fileItems.iterator(); i.hasNext();) {
            FileItem fi = (FileItem) i.next();
            String key = fi.getFieldName();
            if (fi.isFormField()) {
                String val = fi.getString();
                map.put(key, val);
            } else {
                String fileName = fi.getName();
                if (fileName == null || fileName.length() == 0) {
                    continue;

                }
                fileName = new File(fileName).getName();
                File f = new File("C:/upload/", fileName); // 上传文件保存目录
                fi.write(f);
            }
        }
        System.out.println("params: " + map);
    } catch (Exception e) {    
        e.printStackTrace();
    }
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>test upload</title>
</head>
<body>
<h1>ok, params=<%= map %></h1>
</body>
</html>


    
[3] 【OpenGL】懂得GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
    来源: 互联网  发布时间: 2014-02-18
【OpenGL】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式

转载于:http://blog.csdn.net/xiajun07061225/article/details/7455283

GL_TRIANGLE_STRIP绘制三角形方式很多时候令人疑惑,在这里对其运作机理进行解释。

一般情况下有三种绘制一系列三角形的方式,分别是GL_TRIANGLES、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN。

如下图所示:


GL_TRIANGLES是以每三个顶点绘制一个三角形。第一个三角形使用顶点v0,v1,v2,第二个使用v3,v4,v5,以此类推。如果顶点的个数n不是3的倍数,那么最后的1个或者2个顶点会被忽略。


GL_TRIANGLE_STRIP则稍微有点复杂。

其规律是:

构建当前三角形的顶点的连接顺序依赖于要和前面已经出现过的2个顶点组成三角形的当前顶点的序号的奇偶性(如果从0开始):

如果当前顶点是奇数:

组成三角形的顶点排列顺序:T = [n-1 n-2 n].

如果当前顶点是偶数:

组成三角形的顶点排列顺序:T = [n-2 n-21 n].

以上图为例,第一个三角形,顶点v2序号是2,是偶数,则顶点排列顺序是v0,v1,v2。第二个三角形,顶点v3序号是3,是奇数,则顶点排列顺序是v2,v1,v3,第三个三角形,顶点v4序号是4,是偶数,则顶点排列顺序是v2,v3,v4,以此类推。

这个顺序是为了保证所有的三角形都是按照相同的方向绘制的,使这个三角形串能够正确形成表面的一部分。对于某些操作,维持方向是很重要的,比如剔除。

注意:顶点个数n至少要大于3,否则不能绘制任何三角形。


GL_TRIANGLE_FAN与GL_TRIANGLE_STRIP类似,不过它的三角形的顶点排列顺序是T = [n-1 n-2 n].各三角形形成一个扇形序列。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3