文档视界 最新最全的文档下载
当前位置:文档视界 › Android 下载网络图片注意的问题

Android 下载网络图片注意的问题

Android 下载网络图片注意的问题
Android 下载网络图片注意的问题

很多时候我们从网络上获取图片,但有时图片路径明明正确,却要出错。图片小无所谓,图片大了就出错了。

ImageView imageView = new ImageView(context);

URL url = new URL("图片路径");

URLConnection conn = url.openConnection();

conn.connect();

InputStream is = conn.getInputStream();

BitmapFactory.Options options=new BitmapFactory.Options();

options.inSampleSize = 10;

originalImage = BitmapFactory.decodeStream(is,null,options);

imageView.setImageBitmap(bitmapWithReflection);

这样问题就可以解决了

////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////

在使用的过程中,如果网络比较慢的话,则会出现下载不成功的问题。经过google搜索,终于解决了这个问题。

一般我们会用以下的代码:

java代码:

//获取connection,方法略

conn = getURLConnection(url);

is = conn.getInputStream();

//获取Bitmap的引用

Bitmap bitmap = BitmapFactory.decodeStream(is)

但是网络不好的时候获取不了图片,推荐使用以下的方法:

java代码:

//获取长度

int length = (int) conn.getContentLength();

if (length != -1) {

byte[] imgData = new byte[length];

byte[] temp=new byte[512];

int readLen=0;

int destPos=0;

while((readLen=is.read(temp))>0){

System.arraycopy(temp, 0, imgData, destPos, readLen);

destPos+=readLen;

}

bitmap=BitmapFactory.decodeByteArray(imgData, 0, imgData.length);

}

使用上面的方法的好处是在网速不好的情况下也会将图片数据全部下载,然后在进行解码,生成图片对象的引用,所以可以保证只要图片存在都可以下载下来。当然在读取图片数据的时候也可用java.nio.ByteBuffer,这样在读取数据前就不用知道图片数据的长度也就是图片的大小了,避免了有时候http获取的length不准确,并且不用做数组的copy工作。

java代码:

public synchronized Bitmap getBitMap(Context c, String url) {

URL myFileUrl = null;

Bitmap bitmap = null;

try {

myFileUrl = new URL(url);

} catch (MalformedURLException e) {

bitmap = BitmapFactory.decodeResource(c.getResources(),

com.jixuzou.moko.R.drawable.defaultimg);

return bitmap;

}

try {

HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();

conn.setDoInput(true);

conn.connect();

InputStream is = conn.getInputStream();

int length = (int) conn.getContentLength();

if (length != -1) {

byte[] imgData = new byte[length];

byte[] temp = new byte[512];

int readLen = 0;

int destPos = 0;

while ((readLen = is.read(temp)) > 0) {

System.arraycopy(temp, 0, imgData, destPos, readLen);

destPos += readLen;

}

bitmap = BitmapFactory.decodeByteArray(imgData, 0,imgData.length);

}

} catch (IOException e) {

bitmap = BitmapFactory.decodeResource(c.getResources(),com.jixuzou.moko.R.drawable.defaultimg);

return bitmap;

}

return bitmap;

}

////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////

从网络获取图片,数据为InputStream流对象,然后调用BitmapFactory的decodeStream()方法解码获取图片。代码如下:

private Bitmap getUrlBitmap(String url)

{

Bitmap bm;

try{

URL imageUrl=new URL(url);

HttpURLConnection conn=(HttpURLConnection)imageUrl.openConnection();

conn.connect();

InputStream is=conn.getInputStream();

//byte[] bt=getBytes(is); //注释部分换用另外一种方式解码

//bm=BitmapFactory.decodeByteArray(bt,0,bt.length);

bm=BitmapFactory.decodeStream(is); //如果采用这种解码方式在低版本的API上会出现解码问题

is.close();

conn.disconnect();

return bm;

}

catch(MalformedURLException e)

{

e.printStackTrace();

}

catch (IOException e)

{

e.printStackTrace();

}

return null;

}

结果在运行时编译器提示:DEBUG/skia(xxx): --- decoder->decode returned false 已经确定从网络获取的数据流没有出现问题,而是在图片解码时出现错误。上网查找了不少

资料,也没有得出确切的原因,不过有几条意见值得关注。

一种说法是在android 较低版本的api中会有不少内部的错误,我的代码运行时选择2.1API Level 7和2.2API Level 8都会出现这个问题,而选择2.3 API Level 9后能够正常解码图片。

我的另外一种做法是换用别的解码方式对图片解码,见代码中被注释的那俩行,使用decodeByteArray()方法在低版本的API上也能够正常解码,解决了这个问题。

其中getBytes(InputStream is)是将InputStream对象转换为Byte[]的方法,具体代码如下:

private byte[] getBytes(InputStream is) throws IOException {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] b = new byte[1024];

int len = 0;

while ((len = is.read(b, 0, 1024)) != -1)

{

baos.write(b, 0, len);

baos.flush();

}

byte[] bytes = baos.toByteArray();

return bytes;

}

private void queuePhoto(String url, Activity activity, ImageView imageView)

002 {

003 // This ImageView may be used for other images before. So there may be

004 // some old tasks in the queue. We need to discard them.

005

006 photosQueue.Clean(imageView);

007 PhotoToLoad p = new PhotoToLoad(url, imageView);

008

009 synchronized (photosQueue.photosToLoad)

010 {

011 photosQueue.photosToLoad.push(p);

012 photosQueue.photosToLoad.notifyAll();

013 }

014

015 // start thread if it's not started yet

016 if (photoLoaderThread.getState() == Thread.State.NEW)

017 photoLoaderThread.start();

018 }

019

020 public Bitmap getBitmap(String url)

021 {

022 try

023 {

024 // I identify images by hashcode. Not a perfect solution, good for the 025 // demo.

026 String filename = String.valueOf(url.hashCode());

027 File f = new File(cacheDir, filename);

028

029 // from SD cache

030 Bitmap b = decodeFile(f);

031 if (b != null)

032 return b;

033

034 // from web

035 try {

036 Bitmap bitmap = null;

037 if(!url.equals("")){

038 InputStream is = new URL(url).openStream();

039 OutputStream os = new FileOutputStream(f);

040 Utils.CopyStream(is, os);

041 os.close();

042 bitmap = decodeFile(f);

043 }

044 return bitmap;

045 }

046 catch (Exception ex)

047 {

048 ex.printStackTrace();

049 return null;

050 }

051 }

052 catch(Exception e)

053 {

054 e.printStackTrace();

055

056 return null;

057 }

058 }

059

060 /*decodes image and scales it to reduce memory consumption

061 * @param file path

062 * @throws FileNotFoundException

063 * @return bitmap

064 * */

065 private Bitmap decodeFile(File f){

066 Bitmap b = null;

067 try {

068

069 useThisBitmap = null;

070 //Decode image size

071 BitmapFactory.Options o = new BitmapFactory.Options();

072 o.inJustDecodeBounds = true;

073 final int IMAGE_MAX_SIZE = 70;

074 BitmapFactory.decodeStream(new FileInputStream(f), null, o);

075 int scale = 2;

076 if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) { 077 scale = 2 ^ (int) Math.ceil(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5));

078 }

079

080 //Decode with inSampleSize

081 BitmapFactory.Options o2 = new BitmapFactory.Options();

082

083 o2.inSampleSize = scale;

084 b = BitmapFactory.decodeStream(new FileInputStream(f), null, o2);

085 useThisBitmap = b;

086

087 }

088 catch (FileNotFoundException e) {

089 }

090 catch(Exception e)

091 {

092 e.printStackTrace();

093 }

094 finally

095 {

096 System.gc();

097 }

098 return useThisBitmap;

099 }

100

101

102 // Task for the queue

103 private class PhotoToLoad

104 {

105 public String url;

106 public ImageView imageView;

107

108 public PhotoToLoad(String u, ImageView i) {

109 url = u;

110 imageView = i;

111 }

112 }

113

114 private PhotosQueue photosQueue = new PhotosQueue();

115

116

117

118 // stores list of photos to download

119 private class PhotosQueue

120 {

121 private Stack photosToLoad = new Stack(); 122 // removes all instances of this ImageView

123 private void Clean(ImageView image)

124 {

125 for (int j = 0; j < photosToLoad.size();)

126 {

127 if (photosToLoad.get(j).imageView == image)

128 photosToLoad.remove(j);

129 else

130 ++j;

131 }

132 }

133 }

134

135 private class PhotosLoader extends Thread

136 {

137 public void run()

138 {

139 try

140 {

141 while (true)

142 {

143 // thread waits until there are any images to load in the 144 // queue

145 if (photosQueue.photosToLoad.size() == 0)

146 synchronized (photosQueue.photosToLoad) {

147 photosQueue.photosToLoad.wait();

148 }

149 if (photosQueue.photosToLoad.size() != 0) {

150 PhotoToLoad photoToLoad;

151 synchronized (photosQueue.photosToLoad) {

152 photoToLoad = photosQueue.photosToLoad.pop(); 153 }

154 Bitmap bmp = getBitmap(photoToLoad.url);

155 cache.put(photoToLoad.url, bmp);

156 if (((String) photoToLoad.imageView.getTag())

157 .equals(photoToLoad.url)) {

158 BitmapDisplayer bd = new BitmapDisplayer(bmp, 159 photoToLoad.imageView);

160 Activity a = (Activity) photoToLoad.imageView 161 .getContext();

162 a.runOnUiThread(bd);

163 }

164 }

165 if (Thread.interrupted())

166 break;

167 }

168 } catch (InterruptedException e) {

169 // allow thread to exit

170 }

171 }

172 }

173

174 private PhotosLoader photoLoaderThread = new PhotosLoader();

175

176 // Used to display bitmap in the UI thread

177 private class BitmapDisplayer implements Runnable

178 {

179 private Bitmap bitmap;

180 private ImageView imageView;

181

182 private BitmapDisplayer(Bitmap b, ImageView i)

183 {

184 bitmap = b;

185 imageView = i;

186 }

187

188 public void run()

189 {

190 if (bitmap != null)

191 imageView.setImageBitmap(bitmap);

192 }

193 }

194

195 public void stopThread()

196 {

197 photoLoaderThread.interrupt(); 198 }

199

200 public void clearCache()

201 {

202 cache.clear();

203 File[] files = cacheDir.listFiles(); 204 for (File f : files)

205 f.delete();

206 }

207 }

基于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平台下实现理货员的功能:精耕拜访,销售机会,拜访效果,门店销量查询,待办事项,数据维护:队列信息,基础信息,地图下载。 设计思路及工作方法: 1.精耕拜访: (1)初始进入该页面,系统会自动获取该理货员的本日拜访的门店及路线。 (2)下方地图会自动定位目前理货员的位置。 (3)点击门店的具体门店名称,在右边会显示该门店的联系人,电话,及地址,并且地图 会自动切换定位以该门店为中心。 (4)点击地图上的+可实现地图局部放大。-可实现地图的放小。 (5)如已拜访的门店,点击进入可以调去历史拜访数据。如未拜访的门店,点击进入可以新增该拜访记录。 (6)如理货员在拜访期间,发现门店已经有卖而目前系统中无记录的情况,则可以通过扫 描SKU的条形码,系统会自动匹配该SKU的信息给理货员。 匹配顺序:连锁总店—区域管理—基本SKU信息 补充说明: (1)公司动态内容,为了显示保乐力加集团的整体形象,有必要对公司的动态进行展示。 要包括集团的光辉历程,门店信息,集团的促销信息等。 (2)在陈列信息栏中,有其它途径过来的回应确认,可以一栏展示在上半部。如该理货员 需要发起确认,也可以通过点击发起确认进行提出。发起确认的需要销售员进行审核并且 分发。 (3)陈列报告,为显示每次理货员必须处理的门店信息记录及图片等。 (4)在陈列信息栏中,有其它途径过来的回应确认,可以一栏展示在上半部。如该理货员需要发起确认,也可以通过点击发起确认进行提出。发起确认的需要销售员进行审核并且分发。 (5)价格显示,系统会自动带出竞品信息。罗列在下半部。理货员在进行拜访期间,可以对本身的SKU及竞品的价格进行登记。主要登记内容:零售价格,促销价格及促销期间。信息采集完毕,可以供后台进行统计分析。 (7)在陈列信息栏中,有其它途径过来的回应确认,可以一栏展示在上半部。如该理货员需要发起确认,也可以通过点击发起确认进行提出。发起确认的需要销售员进行审核并且分发。 (7)库存信息,主要记录SKU的库存数量。 (8)上半部为助销申请内容,主要是对一些礼品的申请。 (9)订单处理,为新增订单,退货内容及换货内容的跟踪。 2.销售机会: (1)打开销售机会界面,会自动定位目前的门店列表。 (2)用户可以输入门店名称查询具体的门店信息及地图位置。

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中selector背景选择器(全部属性)

浅谈android的selector背景选择器 ---------------------------------------------------- Item顺序是有讲究的,条件限定越细致,则应该放到前面。比如这儿如果把1,2行和3,4行的item交换,那么pressed的就永远无法触发了,因为有item已经满足条件返回了。可以理解为代码中的if语句。 ---------------------------------------------------- 关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法。 首先android的selector是在drawable/xxx.xml中配置的。 先看一下listview中的状态: 把下面的XML文件保存成你自己命名的.xml文件(比如list_item_bg.xml),在系统使用时根据ListView中的列表项的状态来使用相应的背景图片。 drawable/list_item_bg.xml

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

如何用Android用ImageView显示本地和网上 的图片说明 Android:ImageView如何显示网络图片 本文地址:https://www.docsj.com/doc/c516141273.html,/programmar/blog/item/79483ecb2ac75cf552664fd3.html在 Android中显示一张网络图片其实是超级简单的,下面就一个非常简单的例子: Step1: 1、创建你的Activity,本例中以ViewWebImageActivity说明; 2、ViewWebImageActivity中的代码如下: String imageUrl = "https://www.docsj.com/doc/c516141273.html,/baidu/pic/item/7d8aebfebf3f9e125c6008d8.jpg"; //这就是你需要显示的网络图片---网上随便找的 Bitmap bmImg; ImageView imView; Button button1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.docsj.com/doc/c516141273.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消除Preference黑色背景

话不多说,直接切入正题 一、Android中消除preference拖拉时黑色背景方法: 首先建立一个preference_list.xml 代码如下: 注释:android:divider="@drawable/divider" android:cacheColorHint="#00000000" 重点是这两句话:第一句是设置preferece之间的分割线; 第二句就是消除preference拖拽时产生的黑色背景啦!(“#00000000”就是将其设为透明,你也可以把它设为其他颜色) 二、代码中调用方法: 随便写个PreActivity.java import android.content.Context; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; public class PreActivity extends PreferenceActivity { @Override

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 标题栏添加控件及Button控件背景颜色的设置

Android 标题栏添加控件及Button控件背景颜色的设置 一、Android中标题栏添加按 现在很多的Android程序都在标题栏上都显示了一些按钮和标题,如下图: 下面通过实例来看一下如何实现。 1、在layout下创建一个titlebtn.xml文件,内容如下:

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 中的ListView选中项的背景颜色怎么设置

Android 中的ListView选中项的背景颜色怎么设置? android中ListView获得焦点的项默认是黄色的(模拟器上)现在因为需求想要自己定义被选中项的背景能实现吗? 最佳答案 完全可以实现,这用到了Android的Selector(根据组件的状态显示该状态对应的图片,并以此图片作为背景显示)。把下面的XML文件保存成你自己命名的.xml文件(比如list_bg.xml),注意,这个文件相当于一个背景图片选择器,在系统使用时根据 ListView中的列表项的状态来使用相应的背景图片,什么情况使用什么图片我在下面都进行了说明。还有,你可以把它看成是一个图片来使用,放于 drawable目录下,配置背景属性 android:background="@drawable/list_bg"就能达到你需要的目的了。 --------------------------------------------------------------------------------------------------------------- 在values下新建一个color.xml #808080FF #FFFFFFFF #00ffffff

相关文档
相关文档 最新文档