首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

android中-施用2D动画 — 图形处理(Canvas基础)

2012-07-03 
android中-使用2D动画 — 图形处理(Canvas基础)?Android中使用图形处理引擎,2D部分是android SDK内部自己提

android中-使用2D动画 — 图形处理(Canvas基础)

?Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0。今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章。

大部分2D使用的api都在android.graphics和android.graphics.drawable包中。他们提供了图形处理相关的: Canvas、ColorFilter、Point(点)和RetcF(矩形)等,还有一些动画相关的:AnimationDrawable、BitmapDrawable和TransitionDrawable等。以图形处理来说,我们最常用到的就是在一个View上画一些图片、形状或者自定义的文本内容,这里我们都是使用Canvas来实现的。你可以获取View中的Canvas对象,绘制一些自定义形状,然后调用View. invalidate方法让View重新刷新,然后绘制一个新的形状,这样达到2D动画效果。下面我们就主要来了解下Canvas的使用方法。

Canvas对象的获取方式有两种:一种我们通过重写View.onDraw方法,View中的Canvas对象会被当做参数传递过来,我们操作这个Canvas,效果会直接反应在View中。另一种就是当你想创建一个Canvas对象时使用的方法:

?

canvas.drawPosText:

?

?

?

canvas.drawRoundRect:

?

canvas.drawTextOnPath:

?

位置转换方法,canvas.rorate和canvas.translate:

?

?

上面几个例子基本已经将常用的canvas.draw*方法测试过了,我们结合一些事件,做一些有用户交互的应用:

?

?

?

?

?

package com.android777.demo.uicontroller.graphics; ??import java.util.ArrayList; ??import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; ??public class CanvasDemoActivity extends Activity { ??????@Override ????protected void onCreate(Bundle savedInstanceState) { ????????super.onCreate(savedInstanceState); ??????????setContentView(new CustomView1(this)); ??????} ??????/** ?????* 使用内部类 自定义一个简单的View ?????* @author Administrator ?????* ?????*/ ????class CustomView1 extends View{ ??????????Paint paint; ????????private ArrayList<PointF> graphics = new ArrayList<PointF>(); ????????PointF point; ??????????public CustomView1(Context context) { ????????????super(context); ????????????paint = new Paint(); //设置一个笔刷大小是3的黄色的画笔 ????????????paint.setColor(Color.YELLOW); ????????????paint.setStrokeJoin(Paint.Join.ROUND); ????????????paint.setStrokeCap(Paint.Cap.ROUND); ????????????paint.setStrokeWidth(3); ??????????} ??????????@Override ????????public boolean onTouchEvent(MotionEvent event) { ??????????????graphics.add(new PointF(event.getX(),event.getY())); ??????????????invalidate(); //重新绘制区域 ??????????????return true; ????????} ??????????//在这里我们将测试canvas提供的绘制图形方法 ????????@Override ????????protected void onDraw(Canvas canvas) { ????????????for (PointF point : graphics) { ????????????????canvas.drawPoint(point.x, point.y, paint); ????????????} //????????? super.onDraw(canvas); ??????????} ????} ??}

?

当用户点击时将出现一个小点,拖动时将画出一条用细点组成的虚线: