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
18.//软引用内存缓存
19.private static Map
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
28.
29.//是否缓存图片至本地文件
30.private boolean cache2FileFlag = false;
31.
32.//缓存目录,默认是/data/data/package/cache/目录
33.private String cachedDir;
34.
35.public LoaderImpl(Map
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
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
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
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的背景设为透明或者半透明 半透明 透明颜色和不透明度 (alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是 0 到 255(00 到 ff)。对于alpha,00 表示完全透明,ff 表示完全不透明。表达式顺序是“aabbggrr”,其中“aa=alpha”(00 到 ff);“bb=blue”(00 到 ff);“gg=green”(00 到 ff);“rr=red”(00 到 ff)。例如,如果您希望对某叠加层应用不透明度为 50% 的蓝色,则应指定以下值:7fff0000 RGB 设置背景图片透明度: View v = findViewById(R.id.content);//找到你要设透明背景的layout 的id v.getBackground().setAlpha(100);//0~255透明度值 设置背景颜色透明度: ImageView.setBackgroundColor(Color.TRANSPARENT);
android设置背景色为透明 方法一:只要在配置文件内activity属性配置内加上android:theme=@android:style/Theme.Translucent 就好了。这样就调用了android的透明样式! 方法二: 先在res/values下建colors.xml文件,写入:
Android 图片加载性能优化总结
Android 图片加载性能优化总结 一、Android Bitmap加载大尺寸图片优化: 压缩原因: 1.imageview大小如果是200*300那么加载个2000*3000的图片到内存中显然是浪费可耻滴行为; 2.最重要的是图片过大时直接加载原图会造成OOM异常(out of memory内存溢出) 所以一般对于大图我们需要进行下压缩处理 看不懂英文的话木有关系,本篇会有介绍 主要处理思路是: 1.获取图片的像素宽高(不加载图片至内存中,所以不会占用资源) 2.计算需要压缩的比例 3.按将图片用计算出的比例压缩,并加载至内存中使用 官网大图片加载教程(上面网址里的)对应代码就是: /** * 获取压缩后的图片 * @param res * @param resId * @param reqWidth 所需图片压缩尺寸最小宽度 * @param reqHeight 所需图片压缩尺寸最小高度 * @return */ public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) {
// 首先不加载图片,仅获取图片尺寸 final BitmapFactory.Options options = new BitmapFactory.Options(); // 当inJustDecodeBounds设为true时,不会加载图片仅获取图片尺寸信息 options.inJustDecodeBounds = true; // 此时仅会将图片信息会保存至options对象内,decode方法不会返回bitmap 对象 BitmapFactory.decodeResource(res, resId, options); // 计算压缩比例,如inSampleSize=4时,图片会压缩成原图的1/4 options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // 当inJustDecodeBounds设为false时,BitmapFactory.decode...就会返回图片对象了 options.inJustDecodeBounds = false; // 利用计算的比例值获取压缩后的图片对象 return BitmapFactory.decodeResource(res, resId, options); } 代码详解: 核心方法是BitmapFactory.decode...(...., options) ...的意思是此外还有一系列的decodeFile/decodeStream等等方法,都是利用options灵活解析获取图片, 只不过解析图片的来源不同罢了,比如网络图片获取,一般就是解析字节流信息然后decode获取图片实例 Options是图片配置信息,参数详细介绍下: inJustDecodeBounds 是否只解析边界 设为true时去decode获取图片,只会加载像素宽高信息 设为false时decode则会完全加载图片 inSampleSize 压缩比例
Android实验报告—网络通信
实验三Android网络通信 实验目的: 本实验的目的是使学生深入了解利用Intent实现进程间的通信过程。学会利用Intent进行Activity的跳转,以及链接网页信息;学会利用Intent将其他Activity 的信息返回到Activity中的方法。体会Activity间通信的过程。 实验要求: 编程实现下述功能:主界面上有一个“登录”按钮和“链接网页”按钮,点击“登录”按钮后打开一个新的Activity;新的Activity上面有输入用户名和密码的控件(如下图所示)点击“链接网页”按钮,新的Activity上面有输入Uri信息的控件,可以链接到相应的网站,在用户关闭这个Activity后,返回到主界面中程序界面如下图所示: [实现提示] 1、建立Android工程,其中 工程名称:WebCommunication579 包名称:https://www.360docs.net/doc/47237543.html,.bistu.dj1001. WebCommunication579 Activity名称:WebCommunication579 2、工程建立完毕后,首先进行界面设计,建立相应的子Layout界面
3、在工程中添加相应的.java文件,处理各个Activity的事件响应 4、在Manifest中添加新建的Activity信息,进行注册。 程序源码: 主界面java文件代码: package cn.deu.bistu.dj1001.WebCommunication579; import android.app.Activity; import android.content.Intent; import https://www.360docs.net/doc/47237543.html,.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class WebCommunication579 extends Activity { private Button btnLogin,btnGoToWeb; private TextView show; private static final int SUBACTIVITY1 = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/47237543.html,yout.main); btnLogin=(Button) findViewById(R.id.btnLogin); btnGoToWeb=(Button) findViewById(R.id.btnGoToWeb); show=(TextView) findViewById(R.id.A1show); btnLogin.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(WebCommunication592.this, activity1.class); startActivityForResult(intent, SUBACTIVITY1); }}); btnGoToWeb.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(WebCommunication592.this, activity2.class); startActivity(intent); }}); } protected void onActivityResult(int requestCode, int
Android图片相框
10 public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){ 02 1. int width = bitmap.getWidth(); 2. 03 3. int height = bitmap.getHeight(); 4. 04 5. Matrix matrix = new Matrix(); 6. 05 7. float scaleWidht = ((float)w / width); 8. 06 9. float scaleHeight = ((float)h / height); 10. 07 11. matrix.postScale(scaleWidht, scaleHeight); 12. 08 13. Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); 14. 09 15. return newbmp; 16. 17. } = (ImageSwitcher)findViewById(R.id.switcher01); mSwitcher.setFactory(this); mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); g = (Gallery)findViewById(R.id.gallery01); //如果要从sdcard取图片需要改为new ImageAdapter(this,getSD());其中getSD()为自定义的方法 g.setAdapter(new ImageAdapter(this, getSD())); g.setOnItemSelectedListener(this); //为单击mSwitcher设置一个监听器 //显示Switcher里的模式 @Override
Android界面切换与网络通信
一、Android 的界面切换方法有两个: 方法1、通过setContentView切换layout,这个我比较常用。有以下步骤: ①新建一个界面的layout的xml文件 ②触发某一控件(如Button),该控件已经加载监听器,监听器通过setContentView函数切换layout 这样的实现整个过程都是在一个Activity上面实现,所有变量都在同一状态,因此所有变量都可以在这个Activity状态中获得。 方法2、通过转换到另一个Activity,步骤如下 ①建一个Activity类 ②把该类注册到AndroidManifest.xml,如下 ③在原来的Activity上面通过创建Intent类来进行Activity的切换,代码如下
二、Android与服务器通信的方法有: 方法一:http通信,以xml或者json为载体,相互通信数据。 Android对于http的网络通信,提供了标准的java接口——httpURLConnection接口,以及apache的接口——httpclient接口。其中我自己用的比较多的而是httpclient这个接口,因为它的功能更为丰富很有效。 同时http通信也分为post方式和get的方式,两个相比较的话,post传送的数据量比较大,安全性也比较高。因此在做数据查询时,我会用get方式;而在做数据添加、修改或删除时,我就用Post方式 以下是基于httpclient接口,用get和post的方式通信的代码。
方法二:socket通信 socket与http不同的是两个的协议不同,socket是面向TCP/UDP协议的,http通信时面向HTTP协议的。因为我之前做的比较多的都是web方面的项目,相对而言对,对HTTP协议了解比较多。这里就简单说一下socket的通信。