当前位置:  编程技术>移动开发
本页文章导读:
    ▪看图鉴OpenGL之二之投影矩阵求法        看图说OpenGL之二之投影矩阵求法 1.网上有很多求投影矩阵的方法,大都粗略的很,没有一个系统的概念。也许用高中的三角形相似来求这个矩阵,仅仅拥有高中知识的人可以接受,但是,其.........
    ▪ [zt]UIScrollView,点击、滑动翻页事件的界别        [zt]UIScrollView,点击、滑动翻页事件的区分 UIScrollView,点击、滑动翻页事件的区分   http://blog.csdn.net/gavinming/article/details/6552565    最近看到有人问这个问题:在UIScrollView上添加了一个View,Vi.........
    ▪ SDK 4.0 使用httpClient访问网络资源,报错误       SDK 4.0 使用httpClient访问网络资源,报异常 package mars.http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.ht.........

[1]看图鉴OpenGL之二之投影矩阵求法
    来源: 互联网  发布时间: 2014-02-18
看图说OpenGL之二之投影矩阵求法

1.网上有很多求投影矩阵的方法,大都粗略的很,没有一个系统的概念。也许用高中的三角形相似来求这个矩阵,仅仅拥有高中知识的人可以接受,但是,其理论基础很差:

 

 

OB/OD = BA/DC.由此推导出A的y坐标.A的X坐标的推导方法类似。这种方法比较原始。y‘ = y*near/z;

x' = x*near/z;

简单吧。但是为什么那个透视投影矩阵那么复杂呢:

 

 

 

 

 

2.

现在有一种需求,就是求任意一个点,沿着任意一个方向,到任意一个平面的投影!

这个是非常重要的需求。特别是再碰撞检测中。

 

用向量法和点积求交点。

 

所求的点=直线上得点+t*直线方向向量

(所求的点-平面已知点)点乘 (平面法线) = 0

求得t。然后求得所求的点。

 

 


    
[2] [zt]UIScrollView,点击、滑动翻页事件的界别
    来源: 互联网  发布时间: 2014-02-18
[zt]UIScrollView,点击、滑动翻页事件的区分

UIScrollView,点击、滑动翻页事件的区分

 

http://blog.csdn.net/gavinming/article/details/6552565

 

 最近看到有人问这个问题:在UIScrollView上添加了一个View,View上面有图片等元素,需要对单击和滑动事件进行区分。这样的问题有以下几个经常会用到的地方:

     (1)点击UIScrollView上的图片,跳转到其他页面;同时不影响UIScrollView的滑动操作。

     (2)在阅读浏览类产品会经常用到,点击屏幕的中间区域,隐藏/显示状态栏或导航条;同时不影响UIScrollView的滑动翻页操作。

 

       有解决方法事在点击区域添加一个透明的Button,但个人感觉比较复杂,而且效果并不好。以下是我个人的解决方法:

 

       首先了解下UIScrollView对于touch事件的接收处理原理:UIScrollView重载hitTest 方法,并总会返回itself 。所以所有的touch 事件都会进入到它自己里面去了。内部的touch事件检测到这个事件是不是和自己相关的,或者处理或者除递给内部的view。

       为了检测touch是处理还是传递,UIScrollView当touch产生一个timer。

(1)如果150ms内touch未产生移动,它就把这个事件传递给内部view;

(2)如果150ms内touch产生移动,开始scrolling,不会传递给内部的view。(如当你touch一个table时候,直接scrolling,你touch的那行永远不会highlight。)

(3)如果150ms内touch未产生移动并且UIScrollView开始传递内部的view事件,但是移动足够远的话,且canCancelContentTouches = YES,UIScrollView会调用touchesCancelled方法,cancel掉内部view的事件响应,并开始scrolling。(如当你touch一个table, 停止了一会,然后开始scrolling,那一行就首先被highlight,但是随后就不在高亮了)

 

       先前提到的在UIScrollView内部的view点击区域添加透明Button的解决方法,就是需要设置canCancelContentTouches = YES,而且还需重写UIScrollView的touchesShouldCancelInContentView:(UIView *)view方法,在view为UIButton的时候,返回YES。不然点击到button上的事件已经被button接收了,无法cancle掉。另外针对阅读浏览页面,一般手指都会停留在UIScrollView滚动,如果需要隐藏/显示状态栏或导航条,则会出现每点击一次就出现隐藏/显示问题。

 

       解决方法:该问题主要的难题要判断单击事件。由于150ms很小,因此基本上手指一接触到UIScrollView就会传递到内部的view上,此时内部的view需对这个touch进行时间节点的判断,判断它是一个单击事件,然后执行单击操作。

 

 

 

 1、TestView是ScrollView的subview,也可也是继承UIScrollView

 

TestView.h

 

view plain
  • @interface TestView : UIView  
  • {  
  •     UIImageView *imageView;   
  •     NSTimeInterval touchTimer; //记录touch时间,来控制点击和滑动判断  
  • }  
  • @property(nonatomic, retain) UIImageView *imageView;  
  • @property(nonatomic, assign) NSTimeInterval touchTimer;  
  •  

     

     

    TestView.m

     

     

    view plain
  • @implementation TestView  
  • #pragma mark -  
  • #pragma mark Touch Method  
  • @synthesize imageView;  
  • @synthesize touchTimer;  
  •   
  • //thouchesBegan 获取到touch的时间点  
  • - (void)touchesBegan:(NSSet *)touches   
  •            withEvent:(UIEvent *)event  
  • {  
  •     UITouch *touch = [touches anyObject];  
  •     self.touchTimer = [touch timestamp];  
  • }  
  •   
  •   
  • //touchesEnded,touch事件完成,根据此时时间点获取到touch事件的总时间,  
  • - (void)touchesEnded:(NSSet *)touches   
  •            withEvent:(UIEvent *)event  
  • {  
  •     UITouch *touch = [touches anyObject];  
  •     self.touchTimer = [touch timestamp] - self.touchTimer;  
  •       
  •     NSUInteger tapCount = [touch tapCount];  
  •     CGPoint touchPoint = [touch locationInView:self];  
  •       
  •     //判断单击事件,touch时间和touch的区域  
  •     if (tapCount == 1 && self.touchTimer <= 3 && CGRectContainsPoint(self.imageView.frame, touchPoint))  
  •     {  
  •         //进行单击的跳转等事件  
  •     }  
  •       
  • }  
  •  

     


        
    [3] SDK 4.0 使用httpClient访问网络资源,报错误
        来源: 互联网  发布时间: 2014-02-18
    SDK 4.0 使用httpClient访问网络资源,报异常
    package mars.http;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class HttpActivity extends Activity {
    
    	private Button requestButton = null;
    	HttpResponse httpResponse = null;
    	HttpEntity httpEntity = null;
    	InputStream inputStream = null;
    	BufferedReader bufferedReader = null;
    
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    
    		requestButton = (Button) findViewById(R.id.requestButton);
    		requestButton.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				String url = "http://www.baidu.com";
    				HttpGet httpGet = new HttpGet(url);
    				HttpClient httpClient = new DefaultHttpClient();
    				try {
    					httpResponse = httpClient.execute(httpGet);
    					httpEntity = httpResponse.getEntity();
    					inputStream = httpEntity.getContent();
    					bufferedReader = new BufferedReader(new InputStreamReader(
    							inputStream));
    					StringBuffer result = new StringBuffer();
    					String temp = "";
    					while ((temp = bufferedReader.readLine()) != null) {
    						result.append(temp);
    					}
    					System.out.println(result.toString());
    				} catch (ClientProtocolException e) {
    					e.printStackTrace();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}finally{
    					try {
    						inputStream.close();
    						
    					} catch (IOException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				}
    
    			}
    		});
    	}
    }

     如果ActivityManifest中的minSDK

    <uses-sdk android:minSdkVersion="14" />

     配置如果写成 14 就会报异常。改为14一下就正常。不知道是不是bug

     


        
    最新技术文章:
    ▪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