您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 移动设备软件应用开发第6章
第6章Android多媒体6.1Android的图形绘制6.2Android多媒体基础6.3音频播放6.4简单音乐播放器案例6.5视频播放6.6实现拍照功能6.7Android动画设计6.1Android的图形绘制Android图形绘制的基本方法是,先创建一个继承View或SurfaceView的类,然后重写其onDraw()方法,在onDraw()方法中会传递Canvas对象,该对象为画布对象,很多图形都是通过它的drawXXX()方法进行绘制,最后进行图形界面刷新。Android用于图形绘制常用的类有Canvas、Paint、Color等。SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。可以通过SurfaceHolder接口访问这个surface,getHolder()方法可以得到这个接口。类SurfaceHolder,可以把它当成surface的控制器,用来操纵surface。处理它的Canvas上画的效果和动画,控制表面,大小,像素等。绘图过程:继承SurfaceView并实现SurfaceHolder.Callback接口;SurfaceView.getHolder()获得SurfaceHolder对象;SurfaceHolder.addCallback(callback)添加回调函数;SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布Canvas绘画SurfaceHolder.unlockCanvasAndPost(Canvascanvas)结束锁定画图,并提交改变,将图形显示。6.1.1Canvas(画布)Canvas的常用方法有:1.Canvas(Bitmapbitmap)创建一个空画布,可以使用setBitmap()方法来设置绘制具体的画布。2.drawColor(intcolor)设置Canvas的背景颜色。3.voiddrawBitmap(Bitmapbitmap,Rectsrc,Rectdst,Paintpaint)贴图,参数一是Bitmap对象,参数二是源区域,参数三是目标区域,参数四是Paint画刷对象。4.voiddrawLine(floatstartX,floatstartY,floatstopX,floatstopY,Paintpaint)画线,参数一为起始点的x轴位置,参数二为起始点的y轴位置,参数三为终点的x轴水平位置,参数四为y轴垂直位置,最后一个参数为Paint画刷对象。5.voiddrawText(Stringtext,floatx,floaty,Paintpaint)绘制文本,参数一是String类型的文本,参数二是x轴,参数三是y轴,参数四是Paint对象。6.voiddrawPoint(floatx,floaty,Paintpaint)画点,参数一为水平x轴,参数二为垂直y轴,第三个参数为Paint对象。7.voiddrawRect(floatstartX,floatstartY,floatstopX,floatstopY,Paintpaint)绘制矩形。8.drawCircle(floatcx,floatcy,floatradius,Paintpaint)绘制圆形。6.1.2Paint(画笔)Paint的常用方法如下:1.voidsetARGB(inta,intr,intg,intb)设置Paint对象颜色,参数一为alpha透明通道。2.voidsetAlpha(inta)设置alpha透明度,范围为0~255。3.voidsetColor(intcolor)设置颜色,Android内部定义的有Color类包含了一些常见颜色定义。4.voidsetTextSize(floattextSize)设置字体大小。6.1.3温度计绘图案例案例实现的功能是,接收用户输入的温度值,在Activity界面中绘制出一个温度计形状,模拟显示出温度所在的可读值。代码中使用了SurfaceView控件。1、Activity布局文件activity_main.xmlLinearLayoutxmlns:android=:tools=:layout_width=match_parentandroid:layout_height=match_parentandroid:gravity=center_horizontalandroid:orientation=verticaltools:context=com.example.android_demo6_1.MainActivityLinearLayoutandroid:id=@+id/linearLayout1android:layout_width=match_parentandroid:layout_height=wrap_contentandroid:layout_margin=5dpandroid:layout_marginTop=30dpandroid:orientation=horizontalTextViewandroid:id=@+id/txt_tempandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=温度/EditTextandroid:id=@+id/tv_temperature_numberandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:ems=10requestFocus//EditTextButtonandroid:id=@+id/butandroid:layout_width=50dpandroid:layout_height=30dpandroid:onClick=but_Onclickandroid:text=显示android:textSize=12sp//LinearLayoutSurfaceViewandroid:id=@+id/sv_temperatureandroid:layout_width=match_parentandroid:layout_height=match_parentandroid:layout_margin=5dp//LinearLayout2、MainActivity类文件publicclassMainActivityextendsActivityimplementsCallback{privateEditTexttemp;privateSurfaceViewmSurface;privateSurfaceHoldermHolder;privatePaintmPaint,paintCircle,paintLine;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);temp=(EditText)findViewById(R.id.tv_temperature_number);mSurface=(SurfaceView)findViewById(R.id.sv_temperature);mHolder=mSurface.getHolder();mHolder.addCallback(this);}publicvoidbut_Onclick(Viewv){try{drawtemp(temp.getText().toString());}catch(Exceptione){Log.e(temp,e.getMessage());}}//画出温度计并显示温度privatevoiddrawtemp(Stringtemp){//声明画笔mPaint=newPaint();//声明圆形画笔paintCircle=newPaint();//声明直线画笔paintLine=newPaint();//获取canvasCanvascanvas=mHolder.lockCanvas();//获得Y轴数据inty=600-(Integer.valueOf(temp)*4);//设置画笔颜色mPaint.setColor(Color.WHITE);//绘制矩形canvas.drawRect(300,200,350,600,mPaint);//设置圆形画笔颜色paintCircle.setColor(Color.RED);//绘制圆形canvas.drawCircle(325,645,50,paintCircle);//绘制矩形canvas.drawRect(300,y,350,600,paintCircle);//设置直线画笔颜色paintLine.setColor(Color.BLUE);//设置Y轴值intlineY=600;//设置数字变量intnum=0;//判断Y轴直线是否超过方位while(lineY=200){//绘制温度计直线canvas.drawLine(350,lineY,355,lineY,mPaint);//每隔40绘制一条直线if(lineY%40==0){//设置直线canvas.drawLine(350,lineY,360,lineY,paintLine);//绘制文本canvas.drawText(String.valueOf(num),362,lineY+4,mPaint);num+=10;}lineY-=4;}mHolder.unlockCanvasAndPost(canvas);//更新显示内容}6.1.4Bitmap(位图)Bitmap是Android图像处理中最重要类之一。利用Bitmap可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以以指定格式保存图像文件。1.创建和获取位图(1)通过BitmapFactory的各种静态方法,如:根据资源文件创建:Bitmapbmp=BitmapFactory.decodeResource(this.getResources(),R.drawable.bmsrc);根据图片创建:Bitmapbmp=BitmapFactory.decodeFile(/sdcard/dcoim/pets.jpeg);(2)通过Drawable对象:使用BitmapDrawable(InputStreamis)构造一个BitmapDrawable;使用BitmapDrawable类的getBitmap()获取得到位图。(3)通过资源(Resources)需要先得到Resources对象,然后调用openRawResource()方法获取输入流,并将输入流传给一个BitmapDrawable对象,然后调用Bitmap对象的getBitmap()方法得到位图。//得到Resources对象Resourcesr=getApplicationContext().getResources();//以数据流的方式读取资源InputStreamis=r.openRawResource(R.drawable.my_background_image);BitmapDrawablebmpDraw=newBitmapDrawable(is);Bitmapbmp=bmpDraw.getBitmap();2.获取位图信息通过Bitmap的方法可以获取
本文标题:移动设备软件应用开发第6章
链接地址:https://www.777doc.com/doc-3178608 .html