`

Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix

阅读更多

 

一、绘制简单图形

 

Android 中大部分的组件都是 View 的子类,而如果要想进行图形的绘制操作,则可以直接使用一个类继承 View 类,之后覆写 View 类中的指定方法。

· protected void onDraw(Canvas canvas)

         在之前编写图形界面的时候,都是使用一个个的图形组件,那么这些组件都是一个 View 的子类,可是很多时候需要用户自己构图,例如,在做游戏的时候,这些图形基本上都是没有的。

下面给一个范例:

MyView.java

package com.iflytek.demo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

/**
 * @author xdwang
 * 
 * @create 2012-11-11 下午9:19:17
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 自定义组件
 * 
 */
public class MyView extends View {
	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		canvas.drawColor(Color.WHITE); // 设置背景为白色
		Paint paint = new Paint();

		// ------------1、圆形-----------------
		paint.setColor(Color.BLUE); // 设置图形的底色
		canvas.drawCircle(30, 50, 25, paint);// 从30,50为原点,25为半径画原型

		// ------------2、矩形-----------------
		paint.setColor(Color.BLACK);
		canvas.drawRect(80, 20, 160, 80, paint);

		// ------------3、RECT绘制空心矩形-----------------
		Rect rect = new Rect(); // 定义矩形
		rect.set(180, 20, 300, 80);
		paint.setStyle(Style.STROKE);// 设置空心的
		canvas.drawRect(rect, paint);

		// ------------4、绘制文字-----------------
		paint.setColor(Color.RED);
		paint.setTextSize(20);
		canvas.drawText("xdwangiflytek", 40, 110, paint);

		// ------------5、绘制直线-----------------
		paint.setColor(Color.BLACK);
		canvas.drawLine(10, 120, 300, 120, paint);

		// ------------6、绘制空心椭圆-----------------
		RectF oval = new RectF();
		oval.set(10.0f, 140.0f, 110.0f, 200.0f);
		canvas.drawOval(oval, paint);

		// ------------7、绘制空心扇形-----------------
		oval = new RectF();
		oval.set(150.0f, 140.0f, 210.0f, 200.0f);
		canvas.drawArc(oval, 150.0f, 140.0f, true, paint);

	}
}

 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <com.iflytek.demo.MyView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>
 

效果图

 

 

二、 Bitmap

 

         Android.graphics.Bitmap (位图)是 Android 手机中专门提供的用于操作图片资源的操作类,使用此类可以直接从资源文件之中进行图片资源的读取,并且对这些图片进行一些简单的修改。

Bitmap 类的常用方法:

No.

方法

描述

1

Public static Bitmap createBitmap(Bitmap src)

复制一个 Bitmap

2

Public static Bitmap createBitmap(Bitmap source,int x,int y,int width,int height,Matrix m,Boolean filter)

对一个 Bitmap 进行剪切

3

Public final int getHeight()

取得图像的高

4

Public final int getWidth()

取得图像的宽

5

Public static Bitmap createScaledBitmap(Bitmap src,int dstWidth,int dstHeight,boolean filter)

创建一个指定大小的 Bitmap

 

如果要想通过资源文件取得一个 Bitmap 实例,则需要 android.graphics.BitmapFactory 类支持。其方法有:

No.

方法

描述

1

Public static Bitmap decodeByteArray(byte[] data,int offset,int length)

根据指定的数据文件创建 Bitmap

2

Public static Bitmap decodeFile(String pathName)

根据 指定的路径创建 Bitmap

3

Public static Bitmap decodeResource(resources res,int id)

根据指定的资源创建 Bitmap

4

Public static Bitmap decodeStream(InputStream is)

根据指定的 InputStream 创建 Bitmap

 

范例 MyView.java

package com.iflytek.demo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

/**
 * @author xdwang
 * 
 * @create 2012-11-11 下午10:09:44
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 自定义组件
 * 
 */
public class MyView extends View {

	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	protected void onDraw(Canvas canvas) {

		// ------------------1、基本绘图---------------------
//		Bitmap bitmap = BitmapFactory.decodeResource(super.getResources(),
//				R.drawable.ic_launcher); // 找到图片的Bitmap对象
//		Paint paint = new Paint();
//		paint.setAntiAlias(true); // 消除锯齿
//		canvas.drawBitmap(bitmap, 0, 0, paint);
//		paint.setColor(Color.WHITE); // 底色
//		paint.setTextSize(20);
//		canvas.drawText(
//				"图片高度:" + bitmap.getHeight() + ",图片宽度:" + bitmap.getWidth(),
//				10, bitmap.getHeight() + 20, paint);

		// ------------------2、填充桌面---------------------
//		DisplayMetrics dm = super.getResources().getDisplayMetrics();
//		int screenWidth = dm.widthPixels;
//		int screenHeight = dm.heightPixels;
//		Bitmap bitmap = BitmapFactory.decodeResource(super.getResources(),
//				R.drawable.ic_launcher); // 找到图片的Bitmap对象
//		bitmap = Bitmap.createScaledBitmap(bitmap, screenWidth, screenHeight,
//				true);
//		Paint paint = new Paint();
//		paint.setAntiAlias(true); // 消除锯齿
//		canvas.drawBitmap(bitmap, 0, 0, paint);

		// ------------------3、指定位置区域显示---------------------
//		Bitmap bitmap = BitmapFactory.decodeResource(super.getResources(),
//				R.drawable.ic_launcher);	// 找到图片的Bitmap对象
//		Paint paint = new Paint() ;
//		paint.setAntiAlias(true); // 消除锯齿
//		canvas.drawBitmap(bitmap, null, new Rect(30, 50, 200, 200), paint);
		
		// ------------------4、图片剪贴---------------------
		Bitmap bitmap = BitmapFactory.decodeResource(super.getResources(),
				R.drawable.ic_launcher);	// 找到图片的Bitmap对象
		Paint paint = new Paint() ;
		paint.setAntiAlias(true); // 消除锯齿
		canvas.drawBitmap(bitmap, new Rect(10,10,20,20), new Rect(10, 10, 20, 20), paint); 
	}
}

 

Bitmap 最大的特点是可以操作我的二进制数据

 

三、 Matrix

         使用 Bitmap 可以进行图形的绘制,但是如果希望图形可以进行一些平移、旋转、缩放、倾斜等变换的话,则需要使用 android.graphics.Matrix 类(矩阵)的支持。

package com.iflytek.demo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.view.View;

/**
 * @author xdwang
 * 
 * @create 2012-11-11 下午10:22:24
 * 
 * @email:xdwangiflytek@gmail.com
 * 
 * @description 自定义组件
 * 
 */
public class MyView extends View {
	private Bitmap bitmap = null;
	private Matrix matrix = new Matrix();

	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.bitmap = BitmapFactory.decodeResource(super.getResources(),
				R.drawable.ic_launcher);
		
//		float cosValue = (float) Math.cos(-Math.PI / 3);
//		float sinValue = (float) Math.sin(-Math.PI / 3);
//		this.matrix.setValues(new float[] { cosValue, -sinValue, 100, sinValue,
//				cosValue, 200, 0, 0, 2 });
		
		this.matrix.preScale(0.5f, 0.5f, 50, 100);
		this.matrix.preRotate(-60, 50, 100);
		this.matrix.preTranslate(50, 100) ;
	}

	@Override
	protected void onDraw(Canvas canvas) {
		canvas.drawBitmap(this.bitmap, this.matrix, null);
	}

}

 

  • 大小: 24.7 KB
分享到:
评论

相关推荐

    android多媒体学习代码

    这些例子将涵盖从基础的图像显示到复杂的视频处理,以及从简单的动画效果到高级的照相功能,是学习Android多媒体开发的宝贵资源。通过不断实践和学习,开发者能够创建出具有吸引力且功能丰富的Android应用程序。

    Android图像处理技术

    - Canvas类提供了在Bitmap上绘制图形的能力,包括线条、形状、文本和位图等。 - Paint类用于定义绘制的样式,如颜色、线宽、阴影效果等。 - Path类用于创建复杂的几何路径,可以在Canvas上进行绘制。 4. **滤镜...

    Android多媒体应用开发实战详解:图像、音频、视频、2D和3D

    总结,Android多媒体应用开发涉及到图像处理、音频和视频操作,以及2D和3D图形渲染等多个层面。开发者需要深入理解各个API的用法,结合实际场景灵活运用,才能打造出功能丰富、用户体验优秀的多媒体应用。通过不断的...

    Android_UI开发专题(一)_之界面设计

    **Resources** 类是Android中用于访问应用程序资源的核心类之一,它能够帮助开发者管理各种类型的资源文件,如二进制文件、颜色定义、图形文件、多媒体文件等,并提供了一些重要的设备配置信息,比如屏幕方向、输入...

    Android多媒体应用开发实战详解:图像、音频、视频、2D和3D 源代码.rar )

    总结起来,Android多媒体应用开发涵盖图像加载与处理、音频播放与录制、视频播放以及2D图形绘制等多个方面。开发者需要掌握Android提供的各种API,结合第三方库,灵活应对不同的应用场景。通过分析提供的源代码,...

    android自绘控件详细解释

    本文介绍了Android自绘控件的核心概念和关键技术点,包括View、Drawable、Bitmap、Canvas和Paint等。通过理解这些基础知识,开发者可以更好地掌握自绘控件的开发技巧,从而创造出更加丰富多样的用户界面。未来还将...

    Android拼图游戏源码

    总结来说,“Android拼图游戏源码”项目涵盖了Android游戏开发的多个关键领域,包括但不限于UI设计、图形绘制、触摸事件处理、算法设计、数据存储以及多媒体集成。通过学习这个源码,开发者不仅可以掌握Android游戏...

    Android开发应用实战详解源代码

    7.2 绘制几何图形 7.3 手机屏保 7.4 照片拖动效果 7.5 存储卡中的图片 7.6 获取内置媒体文件 7.7 调节音量 7.8 播放mp3资源文件 7.9 录制音频 7.10 实现相机拍照功能 7.10.1 实现原理 7.10.2 编程思想 7.10.3 具体...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得...

    android翻页效果

    总的来说,实现“android翻页效果”不仅需要掌握Android的基础知识,还需要深入理解图形绘制、动画原理以及用户交互。在“pageturntest”项目中,我们可以看到作者如何将这些知识点应用到实践中,通过代码和调试来...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得...

    疯狂Android讲义源码

     第1章 Android应用与开发环境 1  1.1 Android的发展和历史 2  1.1.1 Android的发展和简介 2  1.1.2 Android平台架构及特性 3  1.2 搭建Android开发环境 5  1.2.1 下载和安装Android SDK 5  1.2.2 安装...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得...

    Android实例代码

    第11章、多媒体应用开发 11.1、音频和视频的播放:MediaPlayer; SoundPool; VideoView; 11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: ...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    第11章、多媒体应用开发 11.1、音频和视频的播放:MediaPlayer; SoundPool; VideoView; 11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: ...

    Google Android SDK开发范例大全的目录

    7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得...

    MultiMediaSamples

    在Android中,Bitmap类是用于处理图像的基础,可以加载、绘制、裁剪和旋转图片。此外,还有 Glide、Picasso 等库用于更高效地加载和显示图片。Android还引入了ImageReader,用于接收来自Surface的连续图像帧,常...

Global site tag (gtag.js) - Google Analytics