当前位置: 编程技术>移动开发
本页文章导读:
▪HttpClient4施用(转) HttpClient4使用(转)
详见:http://www.oschina.net/code/snippet_54371_1515
需用到的包:
commons-logging-1.1.1.jar
httpclient-4.0.3.jar
httpcore-4.0.1.jar
package main;
import java.io.IOException;
import java.io.Unsupported.........
▪ 无限滚屏成效,高级视差滚屏 无限滚屏效果,高级视差滚屏
CCParallaxNode不适用于生成无限滚屏效果。使用CCSpriteBatchNode来提高背景图片的渲染速度。 单独的层文件:滚屏效果中的所有单独的条纹文件都是480x320像素的,.........
▪ 无声照相 无声拍照
在Android系统中,通过代码控制拍照都会有咔嚓一声,并且这个声音没法通过设置去除或改变,系统没有让拍照无声的接口。这是由于手机拍照有声音是国际标准,就是为了防止.........
[1]HttpClient4施用(转)
来源: 互联网 发布时间: 2014-02-18
HttpClient4使用(转)
详见:http://www.oschina.net/code/snippet_54371_1515
需用到的包:
commons-logging-1.1.1.jar
httpclient-4.0.3.jar
httpcore-4.0.1.jar
package main;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class Main {
private static HttpClient hc = new DefaultHttpClient();
/**
* @param args
*/
public static void main(String[] args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", "xxx@gmail.com"));
params.add(new BasicNameValuePair("pwd", "xxx"));
params.add(new BasicNameValuePair("save_login", "1"));
String url = "http://www.oschina.net/action/user/login";
String body = post(url, params);
System.out.println(body);
}
/**
* Get请求
* @param url
* @param params
* @return
*/
public static String get(String url, List<NameValuePair> params) {
String body = null;
try {
// Get请求
HttpGet httpget = new HttpGet(url);
// 设置参数
String str = EntityUtils.toString(new UrlEncodedFormEntity(params));
httpget.setURI(new URI(httpget.getURI().toString() + "?" + str));
// 发送请求
HttpResponse httpresponse = hc.execute(httpget);
// 获取返回数据
HttpEntity entity = httpresponse.getEntity();
body = EntityUtils.toString(entity);
if (entity != null) {
entity.consumeContent();
}
} catch (ParseException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
return body;
}
/**
* // Post请求
* @param url
* @param params
* @return
*/
public static String post(String url, List<NameValuePair> params) {
String body = null;
try {
// Post请求
HttpPost httppost = new HttpPost(url);
// 设置参数
httppost.setEntity(new UrlEncodedFormEntity(params));
// 发送请求
HttpResponse httpresponse = hc.execute(httppost);
// 获取返回数据
HttpEntity entity = httpresponse.getEntity();
body = EntityUtils.toString(entity);
if (entity != null) {
entity.consumeContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return body;
}
}
[2] 无限滚屏成效,高级视差滚屏
来源: 互联网 发布时间: 2014-02-18
无限滚屏效果,高级视差滚屏
CCParallaxNode不适用于生成无限滚屏效果。
使用CCSpriteBatchNode来提高背景图片的渲染速度。
单独的层文件:
滚屏效果中的所有单独的条纹文件都是480x320像素的,乍看起来很浪费,但是并不是要把这些单独的文件加载到游戏中去,而是要把它们放到纹理贴图集中去。Zwoptex可以移除每个图片的透明部分,但Zwoptex不能清除一张图片上图像之间存在的大块空间,所以
对于上述类型的图片最好分成单独的文件,以后透明部分暴露出来给zwoptex。避免了“全景渲染造成的浪费”(overdraw),图片之间很少重叠,有效降低重复绘制的像素,提高帧率。
这些图片都是以480x320尺寸保存的,Zwoptext知道它们之间的间距。我们要做的就是把所有的图片放在Zwoptex画布中央,软件会把图片放到正确的位置上。
调用一个保存在成员变量里的节点比通过getNodeByTag方法来调用要来的快。如果在每一帧中都这样做的话,就可以省下几个CPU处理周期。但是,如果要保存几十甚至上百个这样的成员变量的话,那就不值得这样做了。
CCTexture2D* gameArtTexture = [[CCTextureCache sharedTextureCache] addImage:@"game-art.png"];
把相同一张贴图 再次添加到CCTextureCache中是唯一一个获取已被缓存的贴图的方法。第二次调用这个操作不会将贴图再次加载;CCTextureCache这个单例知道这个贴图已被加载过, 会直接调用已被缓存的版本,这个操作速度很快。为什么没有一个像getTextureByName这样的方法来调用已经被缓存的贴图,不过现在确实是没有这样的方法可用。
用一个相同数量大小的数组来存储对应每一层的移动速度因子,相似层的速度应该相同。
方法是把每一种背景条纹图片再加一个到原先图片的右边,与原先图片的尾部相接。这就让原先的背景条纹图片的长度增加了一倍,满足了无限滚屏的要求。根据不同的背景图片,可以选择对图片平铺还是翻转。
重复贴图
可以在一块指定大小的正方形区域里让贴图重复出现。如果你把这块指定的正方形区域设置的够大,你可以达到让背景无限滚屏的效果。至少可以用重复的贴图覆盖几千个像素或者几十个屏幕大小的区域,而不至于影响游戏的运行效率和内存占用率。
要用到的是OpenGL支持的GL_REPEAT贴图参数。不过这个方法只适用于正方形的区域,而且要满足“2的n次方”规则,比如32x32或者128x128像素。
例:用GL_REPEAT重复背景贴图
CGRect repeatRect = CGRectMake(-5000, -5000, 5000, 5000);
CCSprite* sprite = [CCSprite sp riteWithFile:@”square.png” rect:repeatRect];
ccTexParams params =
{
GL_LINEAR,
GL_LINEAR,
GL_REPEAT,
GL_REPEAT
};
[sprite.texture setTexParameters:¶ms];
重复贴图可以使一片图片由小图片平铺而成,但它不能解决无限滚屏。
CCParallaxNode不适用于生成无限滚屏效果。
使用CCSpriteBatchNode来提高背景图片的渲染速度。
单独的层文件:
滚屏效果中的所有单独的条纹文件都是480x320像素的,乍看起来很浪费,但是并不是要把这些单独的文件加载到游戏中去,而是要把它们放到纹理贴图集中去。Zwoptex可以移除每个图片的透明部分,但Zwoptex不能清除一张图片上图像之间存在的大块空间,所以
对于上述类型的图片最好分成单独的文件,以后透明部分暴露出来给zwoptex。避免了“全景渲染造成的浪费”(overdraw),图片之间很少重叠,有效降低重复绘制的像素,提高帧率。
这些图片都是以480x320尺寸保存的,Zwoptext知道它们之间的间距。我们要做的就是把所有的图片放在Zwoptex画布中央,软件会把图片放到正确的位置上。
调用一个保存在成员变量里的节点比通过getNodeByTag方法来调用要来的快。如果在每一帧中都这样做的话,就可以省下几个CPU处理周期。但是,如果要保存几十甚至上百个这样的成员变量的话,那就不值得这样做了。
CCTexture2D* gameArtTexture = [[CCTextureCache sharedTextureCache] addImage:@"game-art.png"];
把相同一张贴图 再次添加到CCTextureCache中是唯一一个获取已被缓存的贴图的方法。第二次调用这个操作不会将贴图再次加载;CCTextureCache这个单例知道这个贴图已被加载过, 会直接调用已被缓存的版本,这个操作速度很快。为什么没有一个像getTextureByName这样的方法来调用已经被缓存的贴图,不过现在确实是没有这样的方法可用。
用一个相同数量大小的数组来存储对应每一层的移动速度因子,相似层的速度应该相同。
方法是把每一种背景条纹图片再加一个到原先图片的右边,与原先图片的尾部相接。这就让原先的背景条纹图片的长度增加了一倍,满足了无限滚屏的要求。根据不同的背景图片,可以选择对图片平铺还是翻转。
重复贴图
可以在一块指定大小的正方形区域里让贴图重复出现。如果你把这块指定的正方形区域设置的够大,你可以达到让背景无限滚屏的效果。至少可以用重复的贴图覆盖几千个像素或者几十个屏幕大小的区域,而不至于影响游戏的运行效率和内存占用率。
要用到的是OpenGL支持的GL_REPEAT贴图参数。不过这个方法只适用于正方形的区域,而且要满足“2的n次方”规则,比如32x32或者128x128像素。
例:用GL_REPEAT重复背景贴图
CGRect repeatRect = CGRectMake(-5000, -5000, 5000, 5000);
CCSprite* sprite = [CCSprite sp riteWithFile:@”square.png” rect:repeatRect];
ccTexParams params =
{
GL_LINEAR,
GL_LINEAR,
GL_REPEAT,
GL_REPEAT
};
[sprite.texture setTexParameters:¶ms];
重复贴图可以使一片图片由小图片平铺而成,但它不能解决无限滚屏。
[3] 无声照相
来源: 互联网 发布时间: 2014-02-18
无声拍照
在Android系统中,通过代码控制拍照都会有咔嚓一声,并且这个声音没法通过设置去除或改变,系统没有让拍照无声的接口。
这是由于手机拍照有声音是国际标准,就是为了防止偷pai,正规的Android发布厂商都会有。
换一种思路,相机除了拍照还有录像和预览的功能,拍照和录像都是无可避免有声音的,而通过相机预览是没有声音的。
所以需要研究一下预览模式下,能不能获取当前的图像。通过研究Camera类,发现真的有一个Camera.PreviewCallback的子类。
通过Camera.setPreviewCallback(previewCallback)方法,在相机预览的过程中,
每一帧都会回调到 onPreviewFrame(byte[] data, Camera paramCamera)中,代码如下:
当然,每一帧回调,都会有帧数据,这些帧数据就需要自己来编码并存储了。
data字节流默认是YCbCr_420_SP,2.2之前的并没有把这种数据转化的方法,
SDK2.2之后,提供了一个YuvImage的类来转成图片。
这样,在需要拍照的时候,取一帧数据就可以了,并没有真正的调用拍照的API,就实现了无声拍照。
在Android系统中,通过代码控制拍照都会有咔嚓一声,并且这个声音没法通过设置去除或改变,系统没有让拍照无声的接口。
这是由于手机拍照有声音是国际标准,就是为了防止偷pai,正规的Android发布厂商都会有。
换一种思路,相机除了拍照还有录像和预览的功能,拍照和录像都是无可避免有声音的,而通过相机预览是没有声音的。
所以需要研究一下预览模式下,能不能获取当前的图像。通过研究Camera类,发现真的有一个Camera.PreviewCallback的子类。
通过Camera.setPreviewCallback(previewCallback)方法,在相机预览的过程中,
每一帧都会回调到 onPreviewFrame(byte[] data, Camera paramCamera)中,代码如下:
private PreviewCallback previewCallback = new PreviewCallback(){
@Override
public void onPreviewFrame(byte[] data, Camera paramCamera){
Log.i(TAG, "onPreviewFrame");
try {
YuvImage yuvimage = new YuvImage(
data,
ImageFormat.NV21,
paramCamera.getParameters().getPreviewSize().width,
paramCamera.getParameters().getPreviewSize().height,
null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(
new Rect(0,0,paramCamera.getParameters().getPreviewSize().width,
paramCamera.getParameters().getPreviewSize().height), 80, baos);
FileOutputStream outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", 11111));
outStream.write(baos.toByteArray());
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
camera.stopPreview();
camera.setPreviewCallback(null);
}
};
当然,每一帧回调,都会有帧数据,这些帧数据就需要自己来编码并存储了。
data字节流默认是YCbCr_420_SP,2.2之前的并没有把这种数据转化的方法,
SDK2.2之后,提供了一个YuvImage的类来转成图片。
这样,在需要拍照的时候,取一帧数据就可以了,并没有真正的调用拍照的API,就实现了无声拍照。
最新技术文章: