ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:901.85KB ,
资源ID:6659701      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6659701.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android图片处理与动画.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android图片处理与动画.docx

1、Android 图片处理与动画第四章 图片处理手机应用离不开图片。图片不但可以给应用带来美观的界面,而且可以为用户提供丰富的功能和体验,在当下很难想象一个完全由文本组成的手机软件;而在开发过程中,对图片的加载,缓存,显示等处理又会直接影响整个项目的应能。所以,在Android中对图片处理的重要性不言而喻。本章中读者应该着重掌握如下内容:(1)使用Matrix对图片进行变换(2)Bitmap的操作(3)图片异步加载框架的使用4.1 图片处理4.1.1使用Style和Theme创建样式与主题如果我们平时注意观察了那些成熟的Android应用,就会发现它们大都使用一种统一的风格和样式贯穿整个项目,例

2、如统一的背景色或背景图片,统一的标题栏,统一的按钮样式,统一的字体等等。而这种“统一”就来自于Style(样式)和Theme(主题)的使用1. StyleStyle从本质上讲就是一些属性的集合,例如:layout_width,layout_height,textSize,textColor等等,Style将这些属性定义在xml文件中,供其他布局文件中的控件引用。其角色类似于页面中的css,将样式单独抽离出来,方便修改和重用。Style的定义Style定义在styles.xml中,创建在res/values/目录下,代码如下: 25sp bold 上面代码中定义了一个名为itemTitle的样式

3、,它包含textSize,textStyle两个属性。Style的使用Style可以在布局文件中通过名字来引用,代码如下: 2.ThemeTheme可以说和Style是完全一样的,只不过Theme是针对Activity或整个项目的。Theme的定义Theme定义在theme.xml中,创建在res/values/目录下,代码如下: #FFFFFFFF color/custom_background_color 上面代码中定义了一个名为RiverTheme的主题,它包含一个windowBackgroud属性。这里继承了系统的theme.light,一般theme是继承的,这样可以对默认的风格不必

4、重复定义。本例定义了一个背景色。这里背景色要单独声明,不能在item元素中直接写颜色值,会提示语法错误。Theme的使用Theme可以在Manifest文件中通过名字来引用,代码如下:4.1.2 Matrix实现图片的几何操作在Android中,若想对图片进行缩放,旋转等操作,就需要使用Matrix类。Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种。下面的代码展示了实现缩放和旋转两种操作的步骤: /根据图片资源创建相应的Bitmap对象 myBmp = BitmapFactory.decodeResource(getRes

5、ources(), R.drawable.im01); /获取图片的原始宽高 bmpWidth = myBmp.getWidth(); bmpHeight = myBmp.getHeight(); /实例化matrix Matrix matrix = new Matrix(); /设定Matrix属性 x,y缩放比例为1.5 matrix.postScale(1.5F, 1.5F); /顺时针旋转45度 matrix.postRotate(45.0F); /根据Matrix的设定产生新的Bitmap对象 newBmp = Bitmap.createBitmap(myBmp, 0, 0, bmp

6、Width, bmpHeight, matrix, true);在上面代码中,matrix的方法postScale和postRotate分别用来对图片的缩放和旋转进行设定。缩放和旋转都围绕着一个中心点来进行,在默认情况下,中心点为(0,0),该点位于图片的物理中心。实例BitmapDemo演示了对图片的旋转和缩放,如图4-1所示,拖动界面上方的拖动条(SeekBar),可以顺时针旋转图片;点击下方按钮,可以放大图片。图4-1 图片的旋转和缩放布局文件main.xml内容如下: BitmapDemoActivity.java代码如下:package com.spl;import android.

7、app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.SeekBar;publi

8、c class BitmapDemoActivity extends Activity ImageView myImageView; Bitmap myBmp, newBmp; int bmpWidth, bmpHeight; SeekBar seekbarRotate; Button big; float rotAngle, scaleRate; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main);

9、myImageView = (ImageView) findViewById(R.id.imageview); /根据图片资源创建相应的Bitmap对象 myBmp = BitmapFactory.decodeResource(getResources(), R.drawable.im01); /获取图片的原始宽高 bmpWidth = myBmp.getWidth(); bmpHeight = myBmp.getHeight(); scaleRate = 1.2F; /实例化matrix Matrix matrix = new Matrix(); /设定Matrix属性 x,y缩放比例为1.

10、5 matrix.postScale(1.5F, 1.5F); /顺时针旋转45度 matrix.postRotate(45.0F); /根据Matrix的设定产生新的Bitmap对象 newBmp = Bitmap.createBitmap(myBmp, 0, 0, bmpWidth, bmpHeight, matrix, true); seekbarRotate =(SeekBar) findViewById(R.id.seekBarId); seekbarRotate.setOnSeekBarChangeListener(onRotate); big = (Button) findVie

11、wById(R.id.big); big.setOnClickListener(bigClick); /按钮点击监听器 private OnClickListener bigClick = new OnClickListener() Override public void onClick(View arg0) Matrix matrix = new Matrix(); /设定Matrix属性 x,y缩放比例为1.5 matrix.postScale(scaleRate, scaleRate); newBmp = Bitmap.createBitmap(myBmp, 0, 0, bmpWidt

12、h, bmpHeight, matrix, true); myImageView.setImageBitmap(newBmp); BitmapDemoActivity.this.setTitle(scale:+scaleRate); scaleRate *= 1.2F;/ 让放大比例持续增大 ; / 拖动条监听器 private SeekBar.OnSeekBarChangeListener onRotate=new SeekBar.OnSeekBarChangeListener() public void onStopTrackingTouch(SeekBar seekBar) public

13、 void onStartTrackingTouch(SeekBar seekBar) public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) /拖动过程中的事件处理 Matrix m = new Matrix(); m.postRotate(float)progress*3.6F);/产生一定角度的旋转 newBmp=Bitmap.createBitmap(myBmp, 0, 0, bmpWidth, bmpHeight, m, true); myImageView.setImageBitm

14、ap(newBmp); ;4.1.3 Bitmap的使用Bitmap称为点阵图像或位图图像,是由像素组成的,每个像素都可以看成颜色及透明度等信息的二进制编码单位,多个像素在一个平面上的二维排列就构成了Bitmap。Bitmap是Android中处理图像最重要的类之一。一张图片要想显示在Android应用中,必须先将图片文件的信息内容读取到Bitmap中。Bitmap位于android.graphics包中,它不提供对外的构造方法,只能通过BitmapFactory的静态方法来实例化。BitmapFactory提供了多个方法来获取Bitmap实例,下面给大家逐一介绍:1)从文件获取myBmp =

15、 BitmapFactory.decodeFile(pathName);myBmp = BitmapFactory.decodeFile(pathName, opts);pathName为图片的绝对路径,一般为SDCard上的路径。2)从资源中获取 myBmp = BitmapFactory.decodeResource(res, id); myBmp = BitmapFactory.decodeResource(res, id, opts);res为资源对象,一般为getResources()。id为图片的资源id,在R文件中有定义,例如:R.drawable.img3)从流中获取myBmp

16、 = BitmapFactory.decodeStream(is);myBmp = BitmapFactory.decodeStream(is, outPadding, opts);is是InputStream对象,该输入流的来源可以是本地文件,也可以是网上资源4)从字节数组中获取myBmp = BitmapFactory.decodeByteArray(data, offset, length);myBmp = BitmapFactory.decodeByteArray(data, offset, length, opts);data为字节数组offset为在数组中从第几个下标开始解析len

17、gth是解析的长度以上所有方法都有一个带opts参数的重载,这个opts参数的类型是BitmapFactory.Options,通过它我们可以在图片加载的尺寸,对内存的占用等方面进行设定,从而达到防止内存溢出,提高运行速度等效果。BitmapFactory.Options的几个常用属性和使用样例见下面代码: BitmapFactory.Options opts = new BitmapFactory.Options(); opts.outWidth = 200; / 输入缩略图宽度为200 opts.outHeight = 200; / 输出缩略图高度为200 /如果设置为TRUE,不获取图片

18、,不加载到内存。但是会把图片的高度和宽度都获取到 opts.inJustDecodeBounds = true; /设为2代表宽和高都是原来的1/2 ,则图是原来的1/4;且在内存所占空间也是原来的1/4 opts.inSampleSize = 2;从以上代码可以看出,多数Options的属性都有降低资源消耗的作用,这为应用程序的提高效率和健壮性等方面提供了很大的帮助,使我们编写的程序更加具有专业水平。实例BitmapSampleDemo演示了上面介绍的4中加载Bitmap的方法,运行效果如图4-2所示。图4-2 实例BitmapSampleDemo运行效果该实例界面由4个按钮,1个Image

19、View以及1个ProgressBar组成。布局文件main.xml代码如下: 该实例的MainActivity代码如下:package spl.bitmap.sample;import java.io.ByteArrayOutputStream;import java.io.InputStream;import .HttpURLConnection;import .URL;import android.app.Activity;import android.content.res.AssetManager;import android.graphics.Bitmap;import andro

20、id.graphics.BitmapFactory;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.ProgressBar;public

21、 class MainActivity extends Activity ImageView imageview; ProgressBar progressBar; Bitmap bitmap; Handler handler = new Handler() public void handleMessage(Message msg) switch (msg.what) case 0: imageview.setImageBitmap(bitmap);/ 给ImageView加载Bitmap progressBar.setVisibility(View.INVISIBLE);/ 隐藏进度条 b

22、reak; ; ; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); / 初始化控件 Button btn1 = (Button) findViewById(R.id.button1); Button btn2 = (Button) findViewById(R.id.button2); Button btn3 = (Button) findViewById(R.id.button3); Button btn4 = (Button) findViewById(R.id.button4); imageview = (ImageView) findViewById(R.id.imageView1); progressBar = (ProgressBar) findVie

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1