android下载网络图片并缓存

android下载网络图片并缓存
android下载网络图片并缓存

android下载网络图片并缓存

分类:图片缓存加载2014-02-12 10:58 2320人阅读评论(0) 收藏举报

异步下载网络图片,并提供是否缓存至内存或外部文件的功能

异步加载类AsyncImageLoader

public void downloadImage(final String url, final ImageCallback callback);

public void downloadImage(final String url, final boolean cache2Memory, final ImageCallback callback);

public void setCache2File(boolean flag);

public void setCachedDir(String dir);

图片下载和缓存实现类LoaderImpl

1.AsyncImageLoader.java

[java]view plaincopy

1.package com.imagecache;

2.

3.import https://www.360docs.net/doc/47237543.html,ng.ref.SoftReference;

4.import java.util.HashMap;

5.import java.util.HashSet;

6.import java.util.Map;

7.import java.util.concurrent.ExecutorService;

8.import java.util.concurrent.Executors;

9.

10.import android.content.Context;

11.import android.graphics.Bitmap;

12.import android.os.Handler;

13.import android.util.Log;

14.

15.public class AsyncImageLoader {

16.//保存正在下载的图片URL集合,避免重复下载用

17.private static HashSet sDownloadingSet;

18.//软引用内存缓存

19.private static Map> sImageCache;

20.//图片三种获取方式管理者,网络URL获取、内存缓存获取、外部文件缓存获取

21.private static LoaderImpl impl;

22.//线程池相关

23.private static ExecutorService sExecutorService;

24.

25.//通知UI线程图片获取ok时使用

26.private Handler handler;

27.

28.

29./**

30. * 异步加载图片完毕的回调接口

31. */

32.public interface ImageCallback{

33./**

34. * 回调函数

35. * @param bitmap: may be null!

36. * @param imageUrl

37. */

38.public void onImageLoaded(Bitmap bitmap, String imageUrl);

39. }

40.

41.static{

42. sDownloadingSet = new HashSet();

43. sImageCache = new HashMap>();

44. impl = new LoaderImpl(sImageCache);

45. }

46.

47.public AsyncImageLoader(Context context){

48. handler = new Handler();

49. startThreadPoolIfNecessary();

50.

51. String defaultDir = context.getCacheDir().getAbsolutePath();

52. setCachedDir(defaultDir);

53. }

54.

55./**

56. * 是否缓存图片至/data/data/package/cache/目录

57. * 默认不缓存

58. */

59.public void setCache2File(boolean flag){

60. impl.setCache2File(flag);

61. }

62.

63./**

64. * 设置缓存路径,setCache2File(true)时有效

65. */

66.public void setCachedDir(String dir){

67. impl.setCachedDir(dir);

68. }

69.

70./**开启线程池*/

71.public static void startThreadPoolIfNecessary(){

72.if(sExecutorService == null || sExecutorService.isShutdown() || sExe

cutorService.isTerminated()){

73. sExecutorService = Executors.newFixedThreadPool(3);

74.//sExecutorService = Executors.newSingleThreadExecutor();

75. }

76. }

77.

78./**

79. * 异步下载图片,并缓存到memory中

80. * @param url

81. * @param callback see ImageCallback interface

82. */

83.public void downloadImage(final String url, final ImageCallback callback

){

84. downloadImage(url, true, callback);

85. }

86.

87./**

88. *

89. * @param url

90. * @param cache2Memory 是否缓存至memory中

91. * @param callback

92. */

93.public void downloadImage(final String url, final boolean cache2Memory,

final ImageCallback callback){

94.if(sDownloadingSet.contains(url)){

95. Log.i("AsyncImageLoader", "###该图片正在下载,不能重复下载!");

96.return;

97. }

98.

99. Bitmap bitmap = impl.getBitmapFromMemory(url);

100.if(bitmap != null){

101.if(callback != null){

102. callback.onImageLoaded(bitmap, url);

103. }

104. }else{

105.//从网络端下载图片

106. sDownloadingSet.add(url);

107. sExecutorService.submit(new Runnable(){

108.@Override

109.public void run() {

110.final Bitmap bitmap = impl.getBitmapFromUrl(url, cache2 Memory);

111. handler.post(new Runnable(){

112.@Override

113.public void run(){

114.if(callback != null)

115. callback.onImageLoaded(bitmap, url);

116. sDownloadingSet.remove(url);

117. }

118. });

119. }

120. });

121. }

122. }

123.

124./**

125. * 预加载下一张图片,缓存至memory中

126. * @param url

127. */

128.public void preLoadNextImage(final String url){

129.//将callback置为空,只将bitmap缓存到memory即可。

130. downloadImage(url, null);

131. }

132.

133.}

2.LoaderImpl.java

[java]view plaincopy

1.package com.imagecache;

2.

3.import java.io.FileInputStream;

4.import java.io.FileNotFoundException;

5.import java.io.FileOutputStream;

6.import java.io.IOException;

7.import java.io.InputStream;

8.import java.io.UnsupportedEncodingException;

9.import https://www.360docs.net/doc/47237543.html,ng.ref.SoftReference;

10.import https://www.360docs.net/doc/47237543.html,.HttpURLConnection;

11.import https://www.360docs.net/doc/47237543.html,.URL;

12.import java.security.MessageDigest;

13.import java.security.NoSuchAlgorithmException;

14.import java.util.Map;

15.

16.import android.graphics.Bitmap;

17.import android.graphics.BitmapFactory;

18.

19./**

20. *

21. * @author Administrator

22. * @desc 异步加载图片管理器

23. *

24. */

25.public class LoaderImpl {

26.//内存中的软应用缓存

27.private Map> imageCache;

28.

29.//是否缓存图片至本地文件

30.private boolean cache2FileFlag = false;

31.

32.//缓存目录,默认是/data/data/package/cache/目录

33.private String cachedDir;

34.

35.public LoaderImpl(Map> imageCache){

36.this.imageCache = imageCache;

37. }

38.

39./**

40. * 是否缓存图片至外部文件

41. * @param flag

42. */

43.public void setCache2File(boolean flag){

44. cache2FileFlag = flag;

45. }

47./**

48. * 设置缓存图片到外部文件的路径

49. * @param cacheDir

50. */

51.public void setCachedDir(String cacheDir){

52.this.cachedDir = cacheDir;

53. }

54.

55./**

56. * 从网络端下载图片

57. * @param url 网络图片的URL地址

58. * @param cache2Memory 是否缓存(缓存在内存中)

59. * @return bitmap 图片bitmap结构

60. *

61. */

62.public Bitmap getBitmapFromUrl(String url, boolean cache2Memory){

63. Bitmap bitmap = null;

64.try{

65. URL u = new URL(url);

66. HttpURLConnection conn = (HttpURLConnection)u.openConnection();

67. InputStream is = conn.getInputStream();

68. bitmap = BitmapFactory.decodeStream(is);

69.

70.if(cache2Memory){

71.//1.缓存bitmap至内存软引用中

72. imageCache.put(url, new SoftReference(bitmap));

73.if(cache2FileFlag){

74.//2.缓存bitmap至/data/data/packageName/cache/文件夹中

75. String fileName = getMD5Str(url);

76. String filePath = this.cachedDir + "/" +fileName;

77. FileOutputStream fos = new FileOutputStream(filePath);

78. https://www.360docs.net/doc/47237543.html,press(https://www.360docs.net/doc/47237543.html,pressFormat.PNG, 100, fos);

79. }

80. }

81.

82. is.close();

83. conn.disconnect();

84.return bitmap;

85. }catch(IOException e){

86. e.printStackTrace();

87.return null;

88. }

90.

91./**

92. * 从内存缓存中获取bitmap

93. * @param url

94. * @return bitmap or null.

95. */

96.public Bitmap getBitmapFromMemory(String url){

97. Bitmap bitmap = null;

98.if(imageCache.containsKey(url)){

99.synchronized(imageCache){

100. SoftReference bitmapRef = imageCache.get(url); 101.if(bitmapRef != null){

102. bitmap = bitmapRef.get();

103.return bitmap;

104. }

105. }

106. }

107.//从外部缓存文件读取

108.if(cache2FileFlag){

109. bitmap = getBitmapFromFile(url);

110.if(bitmap != null)

111. imageCache.put(url, new SoftReference(bitmap)); 112. }

113.

114.return bitmap;

115. }

116.

117./**

118. * 从外部文件缓存中获取bitmap

119. * @param url

120. * @return

121. */

122.private Bitmap getBitmapFromFile(String url){

123. Bitmap bitmap = null;

124. String fileName = getMD5Str(url);

125.if(fileName == null)

126.return null;

127.

128. String filePath = cachedDir + "/" + fileName;

129.

130.try {

131. FileInputStream fis = new FileInputStream(filePath); 132. bitmap = BitmapFactory.decodeStream(fis);

133. } catch (FileNotFoundException e) {

134. e.printStackTrace();

135. bitmap = null;

136. }

137.return bitmap;

138. }

139.

140.

141./**

142. * MD5 加密

143. */

144.private static String getMD5Str(String str) {

145. MessageDigest messageDigest = null;

146.try {

147. messageDigest = MessageDigest.getInstance("MD5");

148. messageDigest.reset();

149. messageDigest.update(str.getBytes("UTF-8"));

150. } catch (NoSuchAlgorithmException e) {

151. System.out.println("NoSuchAlgorithmException caught!"); 152.return null;

153. } catch (UnsupportedEncodingException e) {

154. e.printStackTrace();

155.return null;

156. }

157.

158.byte[] byteArray = messageDigest.digest();

159. StringBuffer md5StrBuff = new StringBuffer();

160.for (int i = 0; i < byteArray.length; i++) { 161.if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) 162. md5StrBuff.append("0").append(Integer.toHexString(0xFF & by teArray[i]));

163.else

164. md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i])) ;

165. }

166.

167.return md5StrBuff.toString();

168. }

169.

170./**

171. * MD5 加密

172. private static String getMD5Str(Object...objects){

173. StringBuilder stringBuilder=new StringBuilder();

174. for (Object object : objects) {

175. stringBuilder.append(object.toString());

176. }

177. return getMD5Str(stringBuilder.toString());

178. }*/

179.}

3.测试Activity

[java]view plaincopy

1.package com.imagecache;

2.

3.import android.app.Activity;

4.import android.graphics.Bitmap;

5.import android.os.Bundle;

6.import android.widget.ImageView;

7.

8.public class MainActivity extends Activity {

9./** Called when the activity is first created. */

10.@Override

11.public void onCreate(Bundle savedInstanceState) {

12.super.onCreate(savedInstanceState);

13. setContentView(https://www.360docs.net/doc/47237543.html,yout.main);

14.

15.final ImageView iv = (ImageView)findViewById(R.id.iv);

16.//网络图片地址

17. String imgUrl = "http://...";

18.

19.//for test

20. AsyncImageLoader loader = new AsyncImageLoader(getApplicationContext

());

21.

22.//将图片缓存至外部文件中

23. loader.setCache2File(true); //false

24.//设置外部缓存文件夹

25. loader.setCachedDir(this.getCacheDir().getAbsolutePath());

26.

27.//下载图片,第二个参数是否缓存至内存中

28. loader.downloadImage(imgUrl, true/*false*/, new AsyncImageLoader.Ima

geCallback() {

29.@Override

30.public void onImageLoaded(Bitmap bitmap, String imageUrl) {

31.if(bitmap != null){

32. iv.setImageBitmap(bitmap);

33. }else{

34.//下载失败,设置默认图片

35. }

36. }

37. });

38. }

39.

40.}

基于Android平台的无线WiFi控制方法_王雷概要

文章编号:1007-757X(20127-0058-04 基于Android平台的无线WiFi控制方法 王雷,蓝箭,陈雪娟,陈峰 摘要:提出了一种基于Android手机的无线WiFi控制系统。首先采用嵌入式ARM9为硬件控制模块,手机终端以Android 为应用程序的开发,编写了一个手机客户端软件,完成了手机端与控制器端之间的数据传输,实现了手机远程对PWM调速等的控制。系统中Android手机可利用周围无线网络资源与其他设备进行交互并实施控制,不仅为现有智能控制系统提供了新的控制方法,也为实现机器与人的信息交换提供了新的交互手段。 关键词:Android;嵌入式系统;WiFi;PWM控制 中图分类号:TP399 文献标志码:B Control Method Based on WiFi in Android Wang Lei, Lan Jian, Chen XueJuan, Chen Feng (School of Mechatronics Engineering and Automation, Shanghai University, Shanghai 200072, China Abstract:The paper presents a wireless WiFi control system based on phones with Android system The system was builded with embedded technology based on ARM9 hardware control module to develop the Android application for mobile terminal and a cell phone client application, which is used to complete data transfer between the mobile terminal and the controller that enables the cell phone to control the speed of device with PWM method. Android phone use the wireless network resources around to interact with and control other devices. This not only provides a new control method for existing intelligent control system, but also a new interac-tive approach of information exchange for HMI.

Android图片处理工具类(圆角,压缩)

Android图片处理工具类(圆角,压缩) 工作中用到的图片处理工具类,简单写下来,以便备用! public class BitmapUtils { /** * 图像背景圆角处理 * bitmap要处理的图片 roundPx 图片弯角的圆度一般是5到10之间 */ public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) { // 创建与原图大小一样的bitmap文件,Config.ARGB_8888根据情况可以改用其它的 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); // 实例画布,绘制的bitmap将保存至output中 Canvas canvas = new Canvas(output); final int color = 0xff424242;//写自己需要的颜色值 final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true);

canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawRoundRect(rectF, roundPx, roundPx, paint); paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); bitmap.recycle(); bitmap = null; return output; } /** * bitmap缩放 * width要缩放的宽度 height要缩放的高度 */ public static Bitmap getBitmapDeflation(Bitmap bitmap, int width, int height, boolean recycle) { if (null == bitmap) { return null;

移动互联网应用开发-Android网络编程基础实验

西安邮电大学 通信与信息工程学院 实验报告 (2018/ 2019学年第 2 学期) 课程名称:移动互联网应用开发 实验名称:Android网络编程基础实验 组成员/学号: 专业/班级:通信工程1612 指导教师:金蓉 实验时间:2019年5月14日 一、实验目的和要求

1、掌握基于串口通信的Android应用程序的开发方法 2、掌握基于多线程的Android应用程序的设计开发方法 3、掌握基于socket套接字的Android应用程序的设计开发方法 二、实验原理 1、串口通信 串行端口(SeiailPort)简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。申行接口是指数据一位一位地顺序传送,其特点 是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线), 从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。 串口通信用于ASCII码字符的传输。通信使用3根线完成,分别是地线(GND)、发送(TX)、 接收(RX)。由于串口通信是异步模式,端口能够在一根线上发送数据同时在另一根线上 接收数据。串口通信最重要的参数是波特率、数据位、停止价和奇偶校验。对于两个进行 通信的端口,这些参数必须匹配。 因为串口通信涉及到底层比较难,所以谷歌封装了一个比较简单的方法串口类android-serialport-api,只要四步我们就可以使用该串口:1)打开串口(及配置串口); 2)读串口;3)写串口;4)关闭串口。 2、多线程 多线程,是指从软件或者硬件上实现多个线程并发执行的技术。当用户需要执行一些耗时操作,比如发起一条网络请求时,考虑到网速等其他因素,服务器未必会立刻响应请求,那么就必须将这类操作放在子线程中运行,这就需要实现多线程编程。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用Thread 编程的概念就叫作“多线程处理(Multithreading)”。Android多线程编程与Java 多线程编程语法相同。 线程: Android 中的线程是Android程序执行流的最小单元,即安卓CPU分配的最小单元是线程。 当应用程序启动时,Android 首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进行事件分发。Thead.currentThread()是当前线程 安卓新建线程的两种方法: 1) new Thread(new Runnable(){ @Override

如何在android程序中显示图片

我们做Android 程序的时候,有时候需要显示图片在界面上,这里我们将实现一个将图片展示到手机屏幕,并让其不停的浮动的效果! 首先我们要先准备一张图片,在这里我准备了一张图片,如下: 将此图片放到文件夹"res->drawable-*dpi"下,记得,三个文件夹都要放,因为系统会根据不同的分辨率去取不同的图片,如果有的没放,在某些分辨率下,会找不到资源。将此图片重命名为“pic.png”,在R.java里的drawable 类里会生成一个pic的常量。 图片要显示,就是要容器可以让其显示,因为所有的Android的UI组件都是继承自View,View也实现了Drawable接口,所以在此,我们也重新定义一个View让其用来显示我们的这张图片,并让这张图片浮动。我们创建一个在包“org.leo.bitmap”下的,类名为“MovingPictureView”的类,该类继承自android.view.View。此类目前代码大致如下: public class MovingPictureView extends View { public MovingPictureView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } } 我们要重载他的“onDraw”方法,这个方法就是Android框架展现View的时候用来绘制显示内容那个的方法。在此我们将他的所有方法体都删除掉(上面代码红色部分删掉),完全将其重写。首先我们要创建一个图片对象,在Android里,所有位图图片都是使用Bitmap类来封装的,我们就先声明一个代表我们刚才图片的一个Bitmap对象,可通过以下方式声明: Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pic); 其中的“getResources()”方法,是有View提供的,可以根据此方法获得我们所有的资源,将来有机会再细说!

android的网络管理设计与实现

android的网络管理设计与实现

目录 摘要................................................................... - 3 - ABSTRACT........................................................... - 5 - 绪论................................................................... - 6 - 1 Android的架构分析.................................... - 7 - 1.1 Android的功能特征........................ - 7 - 1.2 Android架构分析............................ - 7 - 1.2.1应用程序框架........................ - 8 - 1.2.2类库........................................ - 8 - 1.2.3 Android运行时组件.......... - 10 - 1.3 Android应用的构成和工作机制.. - 10 - 2 手机网络管理平台前台设计实现............. - 11 - 2.1 系统设计需求................................. - 11 - 2.1.1 需求分析............................. - 11 - 2.1.2 功能模块............................. - 12 - 2.1.3 数据库设计......................... - 13 - 2.1.4 性能及安全性分析............. - 15 - 2.2 系统代码实现................................. - 15 - 2.2.1 Package Explorer中的组件- 15 - 2.2.2应用程序的资源.................. - 16 - 2.2.3 布局文件main.xml............ - 16 - 2.3 软件测试实现............................... - 17 -

如何用Android用ImageView显示本地和网上的图片说明

如何用Android用ImageView显示本地和网上 的图片说明 Android:ImageView如何显示网络图片 本文地址:https://www.360docs.net/doc/47237543.html,/programmar/blog/item/79483ecb2ac75cf552664fd3.html在 Android中显示一张网络图片其实是超级简单的,下面就一个非常简单的例子: Step1: 1、创建你的Activity,本例中以ViewWebImageActivity说明; 2、ViewWebImageActivity中的代码如下: String imageUrl = "https://www.360docs.net/doc/47237543.html,/baidu/pic/item/7d8aebfebf3f9e125c6008d8.jpg"; //这就是你需要显示的网络图片---网上随便找的 Bitmap bmImg; ImageView imView; Button button1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/47237543.html,yout.main); imView = (ImageView) findViewById(R.id.imview); imView.setImageBitmap(returnBitMap(imageUrl)); } public Bitmap returnBitMap(String url) { URL myFileUrl = null; Bitmap bitmap = null; try { myFileUrl = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } try { HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setDoInput(true); conn.connect();

android 图片剪裁

1. Canvas类用来实现绘制.通过组合使用Canva s类的成员函数可以实现随心随欲地绘制图片的任何部分. Canvas.clipRect:设置显示区域 Canvas.drawBitmap:绘制 例子: Bitmap b=Bitma pFactory.decodeStream("图片编号", null);//读取图片 ... Canvas c = null;//实例Canvas c.save();//记录原来的ca nvas状态 c.clipRect(100,100,200,300);//显示从(100,100)到(200,300)的区域(单位:象素) c.drawBitmap(b,10,0,null); //将阉割过的图片画到(10,0)位置 c.restore();//恢复canva s状态 2. android 从sdcard 读取图片剪切粘贴 文章分类:移动开发 android 图片编辑时需要从外界(sdcard ,res/.png...,xml)读取图片到画布,其中从sdcard读取图片到画布的过程如下: public void drawBitMapFromSDcard(String dir) { if(dir ==null || dir.equals("")){ return ; } bitMap = BitmapFactory.decodeFile(dir); int width = bitMap.getWidth(); int height = bitMap.getHeight(); 如果图片像素太大超过手机屏幕大小可以按照手机屏比例进行缩放 if (width > 320 && height > 480) { int newWidth = 320; int newHeight = 480; float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; float minScale = Math.min(scaleWidth, scaleHeight); matrix = new Matrix();

Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析

Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析 Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析 在开发客户端与服务端的应用当中,数据交换接口通常都是通过XML格式来进行数据交换的。近年来,随着AJAX技术的兴起,JSON作为一种轻量级的数据交换格式,以其易于阅读和编写的优点,也越来越多的被使用到各个项目中。在OPhone SDK中,也提供了JSON 的类库方便对JSON格式的数据进行处理。本文将快速讲解JSON 格式,并通过代码示例演示如何分别在客户端和服务器端进行JSON 格式数据的处理。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。 和XML 一样,JSON 也是基于纯文本的数据格式。由于JSON 天生是为JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用JSON 传输一个简单的String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object 对象。 String,Number 和Boolean 用JSON 表示非常简单。例如,用JSON 表示一个简单的字符串“ abc ”,其格式为:"abc"。 除了字符",\,/ 和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他Unicode 字符可以直接输出。下图是一个String 的完整表示结构: 图1.String的完整表示结构 一个Number 可以根据整型或浮点数表示如下: 图2.Number 的表示结构 这与绝大多数编程语言的表示方法一致,例如: 12345(整数) -3.9e10(浮点数)

android图片3d旋转

看到很多人在问如何实现三维的翻转效果,所以今天在这里简单的给大家分析一下,其实在APIDemo中就有这样一个例子,那么我们就以其为例来学习Android中的翻转动画效果的实现,首先看一下运行效果如下图所示。 Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来分析一下Animation 和Transformation。 Animation动画的主要接口,其中主要定义了动画的一些属性比如开始时间,持续时间,是否重复播放等等。而Transformation中则包含一个矩阵和alpha值,矩阵是用来做平移,旋转和缩放动画的,而alpha值是用来做alpha动画的,要实现3D旋转动画我们需要继承自Animation类来实现,我们需要重载getTransformation和applyTransformation,在getTransformation中Animation会根据动画的属性来产生一系列的差值点,然后将这些差值点传给applyTransformation,这个函数将根据这些点来生成不同的Transformation。下面是具体实现: 1.public class Rotate3dAnimation extends Animation { 2.//开始角度 3. private final float mFromDegrees; 4.//结束角度 5. private final float mToDegrees; 6.//中心点

7. private final float mCenterX; 8. private final float mCenterY; 9. private final float mDepthZ; 10.//是否需要扭曲 11. private final boolean mReverse; 12.//摄像头 13. private Camera mCamera; 14. public Rotate3dAnimation(float fromDegrees, float toDegrees, 15. float centerX, float centerY, float depthZ, boolean reverse) { 16. mFromDegrees = fromDegrees; 17. mToDegrees = toDegrees; 18. mCenterX = centerX; 19. mCenterY = centerY; 20. mDepthZ = depthZ; 21. mReverse = reverse; 22. } 23. 24. @Override 25. public void initialize(int width, int height, int parentWidth, int par entHeight) { 26. super.initialize(width, height, parentWidth, parentHeight); 27. mCamera = new Camera(); 28. } 29.//生成Transformation 30. @Override 31. protected void applyTransformation(float interpolatedTime, Transformat ion t) { 32. final float fromDegrees = mFromDegrees; 33.//生成中间角度 34. float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interp olatedTime); 35. 36. final float centerX = mCenterX; 37. final float centerY = mCenterY; 38. final Camera camera = mCamera; 39. 40. final Matrix matrix = t.getMatrix(); 41. 42. camera.save(); 43. if (mReverse) { 44. camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); 45. } else {

安卓图片批量处理软件 (12页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == 安卓图片批量处理软件 篇一:Android_解决图片大量下载:软引用 Android 解决图片大量下载:软引用 1.对象的强、软、弱和虚引用 为了能更加灵活控制对象的生命周期,需要知道对象引用的4中级别,由高到低依次为:强引用、软引用、弱引用和虚引用 备注:这四种的区别: ⑴强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 ⑵软引用(SoftReference) 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存(下文给出示例)。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。 ⑶弱引用(WeakReference) 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。

Android系统中实现网络防火墙的方法

防火墙顾名思义就是作为内部网与外部网之间的一种访问控制设备,常常安装在内部网和外部网交界点上。而网络防火墙是一个位于计算机与它所连接的网络之间的软件。所有网络通信在计算机里流入流出都要经过防火墙。而防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。重要的是防火墙还可以关闭不使用的端口,而且它还能禁止特定端口的流出通信,封锁特洛伊木马,也可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。 智能手机网络防火墙的现状 时下,随着科技迅速发展,智能手机也越来越普及,以及3G网络的快速发展,连4G 都出来服务了,也越来越多的移动用户使用移动智能手机快速上网。于此同时,各类恶意软件也通过网络来盗取用户手机上的的隐私,甚至以此来控制用户的手机。因此,智能手机上的防火墙也就应运而生了。 手机与PC端上的环境不同, Android手机上的网络环境相对于PC端没有那么复杂。因此,现行主流的Android防火墙解决方案都是对手机里的应用设置网络访问权限,而不会像PC上的防火墙那样提供强大的网络监视、数据包过滤、端口监控等功能。 Android网络防火墙的几种实现方式 a) Android应用层:敏感函数hook i. 绝大多数Android应用都是调用Android Framework来实现网络通讯。比如:webView.loadUrl(),HttpClient.execute(),DefaultHttpClient.execute()等。只需穷举这些类的函数,并将它们都Hook住,这样就可实现拦截上网的功能了。 ii. 当然,如果想要Hook这些函数入口,有两种方式:1. 首先需要获得root权限,然后通过进程注入,将Client代码注入到应用进程,在进程上网时,应用进程将会发起IPC 请求到Server进程,由Server进程来决定是否允许其访问网络。2. 通过修改应用本身来加入Hook代码,从而避免了root手机,这样相对比较安全。

Android图片浏览器

长沙学院课程设计说明书 题目Android图片浏览器 系(部) 计算机科学与技术 专业(班级) 软件工程(10软件6班) 姓名彭成辉 学号2010022504 指导教师杨凤年 起止日期2013.05.27~2013.06.21

课程设计任务书 课程名称:综合实训Ⅱ 题目:Android图片浏览器 已知技术参数和设计要求: 设计基于Android平台的图片浏览器程序,具体要求如下: 1.图片文件的管理功能。在配置文件中配置访问SD卡文件的权限,使用File类访问SD卡上的图片文件。 2.用户浏览图片的功能。用户通过触摸屏操作选择图片进行浏览,使用事件响应函数响应用户的操作,可以使用ImageView在屏幕中显示图片。 3.用户编辑图片的功能。用户可以放大、缩小、旋转和裁剪图片。 4.设置壁纸功能。将选择的图片设置为壁纸,可以使用WallPaper类来完成该功能。 5.图片文件的排序功能和查找功能。根据文件的名称、日期或者其他属性进行排序,根据文件的名称、日期或者其他属性进行查找。 6.使用多种视图展示图片的功能。可以使用ListView、GridView或者Gallery类来展示图片。各阶段具体要求: (1)开发前的准备:Android开发环境的搭建。 (2)系统分析与设计:包括程序需求分析、UI设计、业务逻辑设计等。 (3)系统编码实现:根据以上六点要求,对Android图片浏览器进行编码实现。 (4)测试:编写测试用例对程序进行测试。 设计工作量: (1)软件设计:完成问题陈述中所提到的软件以及工作量要求。 (2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。 工作计划: 安排4周时间进行综合实训。 第一周----Android开发环境的搭建,软件需求分析。 第二周----UI设计、业务逻辑设计。 第三、四周----Android图片浏览器的代码实现与软件测试。 注意事项 ?提交文档 长沙学院课程设计任务书(每学生1份) 长沙学院课程设计论文(每学生1份) 长沙学院课程设计鉴定表(每学生1份) 指导教师签名:日期:2013-5-26 教研室主任签名:日期: 系主任签名:日期:

android:设置背景图片、背景颜色透明

android:设置背景图片、背景颜色透明 2012-03-15 16:51:09|分类: android UI |标签: |字号大中小订阅 Button或者ImageButton的背景设为透明或者半透明 半透明

相关文档
最新文档