您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 第11章 Android图形图像
第11章Android图形图像1、Android访问图片2、Android动画3、Android动态图像绘制4、Android图形特效5、Android与OpenGLESAndroid处理图形的能力非常强大,对于2D图形的处理不使用JavaAPI处理,Android系统定义了一系列处理2D图形的处理类,这些类分别位于android.graphics、android.graphics.drawbable.shapes和android.view.animation包中。对于3D图形的处理Android使用OPenGLES,这些类位于javax.microedition.khronos.opengles和android.opengl包中。Android系统中图形大体上分两类,一是静态图形的处理,也就是不经常变化的图片,如icon、logo、动画等。对于这种类型的图片通过各种Drawable类来处理,这种方式一般是将图片放在res/drawable目录或者res/animation目录中。对于动态图片(大小、位置格式经常变化的图片),一般采用不断的重新绘制绘制的方式来处理,例如游戏中场景、角色和道具等。Android使用访问图片创建Drawable对象Android在访问图片时,使用Drawable类及其子类BitmapDrawable、ColorDrawable、ShapeDrawable等类处理,关于Drawable类的初始化有三种方式,一是使用在工程中保存的图片;二是使用mxl定义Drawable属性;三是使用构造器来完成,但这种方法不经常被采纳。使用图片创建Drawable对象,在资源文件中保存一图片文件test.jpg,然后通过R.drawable.test使用该图片,代码如下:ImageViewimgv=(ImageView)findViewById(R.id.imgv);imgv.setImageResource(R.drawable.test);也可以使用xml文件定义Drawable对象例如:在AndroidManifest.xml文件中定义应用的图标:applicationandroid:icon=@drawable/icon.........在布局文件中定义一个ImageView时指定Drawable对象ImageViewandroid:id=@+id/imgvandroid:layout_width=fill-parentandroid:layout_height=wrap_contentandroid:src=@drawable/test/Bitmap和BitmapFactory如果图片是保存在SD卡中,就需要Bitmap和BitmapFactory两个类来读取SD卡中的文件例如:publicclassMainActivityextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//setContentView(R.layout.main);Stringpath=/sdcard/bg.png;Bitmapbm=BitmapFactory.decodeFile(path);ImageViewiv=newImageView(this);iv.setImageBitmap(bm);this.setContentView(iv);}}Album实例这是一个通过调用系统相机实现拍照功能,拍照之后直接进入照片浏览,可以继续拍照也可以退出的小应用。如下图所示:publicclassMainActivityextendsActivity{/**Calledwhentheactivityisfirstcreated.*/privateStringlogTag=Exception;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);try{Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent,0);}catch(Exceptione){Log.v(logTag,e.getMessage());}}protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){try{if(requestCode!=0){return;}super.onActivityResult(requestCode,resultCode,data);Bundleextras=data.getExtras();Bitmapb=(Bitmap)extras.get(data);Intentintent=newIntent();intent.setClass(this,ShowImageActivity.class);intent.putExtra(image,b);this.startActivity(intent);}catch(Exceptione){//TODO:handleexceptionLog.v(logTag,e.getMessage());}}}publicstaticfinalStringMIME_TYPE_IMAGE_JPEG=image/jpeg;publicstaticfinalintACTIVITY_GET_IMAGE=0;publicstaticfinalStringFILE_NAME=name;publicstaticfinalStringFILE_TYPE=type;publicstaticfinalStringFILE_BITS=bits;publicstaticfinalStringFILE_OVERWRITE=overwrite;publicstaticfinalStringFILE_URL=url;privatebyte[]mContent;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.showimage);IntentgetImage=newIntent(Intent.ACTION_GET_CONTENT);getImage.addCategory(Intent.CATEGORY_OPENABLE);getImage.setType(MIME_TYPE_IMAGE_JPEG);startActivityForResult(getImage,ACTIVITY_GET_IMAGE);}@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){if(resultCode!=RESULT_OK){return;}Bitmapbm=null;ContentResolverresolver=getContentResolver();if(requestCode==ACTIVITY_GET_IMAGE){try{UrioriginalUri=data.getData();//获得图片的urimContent=getBytesFromInputStream(resolver.openInputStream(Uri.parse(originalUri.toString())),3500000);bm=getPicFromBytes(mContent,null);ImageViewiv=getThemedImageView();//显示图片iv.setImageBitmap(bm);setContentView(iv);}catch(IOExceptione){System.out.println(e.getMessage());}}}publicstaticbyte[]getBytesFromInputStream(InputStreamis,intbufsiz)throwsIOException{inttotal=0;byte[]bytes=newbyte[4096];ByteBufferbb=ByteBuffer.allocate(bufsiz);while(true){intread=is.read(bytes);if(read==-1)break;bb.put(bytes,0,read);total+=read;}byte[]content=newbyte[total];bb.flip();bb.get(content,0,total);returncontent;}privateImageViewgetThemedImageView(){ImageViewiv=newImageView(this);iv.setBackgroundResource(android.R.drawable.gallery_thumb);returniv;}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//TODOAuto-generatedmethodstubmenu.add(0,0,0,继续拍照);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){//TODOAuto-generatedmethodstubIntentintent=newIntent(this,MainActivity.class);startActivity(intent);returntrue;}publicstaticBitmapgetPicFromBytes(byte[]bytes,BitmapFactory.Optionsopts){if(bytes!=null)if(opts!=null)returnBitmapFactory.decodeByteArray(bytes,0,bytes.length,opts);elsereturnBitmapFactory.decodeByteArray(bytes,0,bytes.length);returnnull;}}applicationandroid:icon=@drawable/iconandroid:label=@string/app_nameactivityandroid:name=.MainActivityandroid:label=@string/app_nameintent-filteractionandroid:name=android.intent.action.MAIN/categoryandroid:name=android.intent.category.LAUNCHER//intent-filter/activityactivityandroid:name=.ShowImageActivity//applicationuses-sdkandroid:minSdkVersion=4/uses-permissionandroid:name=android.permission.CAMERA/Android中的动画Tween动画Tween动画可以使视图组件移动、放大、缩小,以及产生透明的变化。例如在一个Ima
本文标题:第11章 Android图形图像
链接地址:https://www.777doc.com/doc-3840600 .html