7、在Canvas上显示动画
来源:互联网 发布:轻松筹软件下载 编辑:程序博客网 时间:2024/05/21 06:30
本文翻译自《50 android hacks》
当自定义View的时候,可以利用Canvas给View添加一些动画效果。
下面的例子,是在屏幕上绘制一个红色的小方块,这个小方块会在屏幕上面“乱跳”。
知识点
使用到的知识点:
(1) 在View的子类的draw()中调用invalidate(),可以让View对象一直保持重绘状态,从而可以使Canvas一直处于绘画过程中。
(2) Canvas的绘制功能,例如绘制Rect、Circle、Path等。
(3) 小方块碰撞屏幕边缘的算法。
实现
小方块视图。
继承View类,重写onDraw()方法,并提供一些setter和getter方法,用于设置小方块的属性。判断碰撞事件的逻辑在moveTo()方法中。代码如下:
- public class Rectangle extends View {
- public static final int MAX_SIZE = 40;
- private static final int ALPHA = 255;
- private int mCoordX = 0;
- private int mCoordY = 0;
- private int mRealSize = 40;
- private int mSpeedX = 3;
- private int mSpeedY = 3;
- private boolean goRight = true;
- private boolean goDown = true;
- private DrawView mDrawView;
- private Paint mInnerPaint;
- private RectF mDrawRect;
- public Rectangle(Context context, DrawView drawView) {
- super(context);
- mDrawView = drawView;
- mInnerPaint = new Paint();
- mDrawRect = new RectF();
- /* Red is default */
- mInnerPaint.setARGB(ALPHA, 255, 0, 0);
- mInnerPaint.setAntiAlias(true);
- }
- public void setARGB(int a, int r, int g, int b) {
- mInnerPaint.setARGB(a, r, g, b);
- }
- public void setX(int newValue) {
- mCoordX = newValue;
- }
- public int getX() {
- return mCoordX;
- }
- public void setY(int newValue) {
- mCoordY = newValue;
- }
- public int getY() {
- return mCoordY;
- }
- public void move() {
- moveTo(mSpeedX, mSpeedY);
- }
- private void moveTo(int goX, int goY) {
- // check the borders, and set the direction if a border has reached
- if (mCoordX > (mDrawView.width - MAX_SIZE)) {
- goRight = false;
- }
- if (mCoordX < 0) {
- goRight = true;
- }
- if (mCoordY > (mDrawView.height - MAX_SIZE)) {
- goDown = false;
- }
- if (mCoordY < 0) {
- goDown = true;
- }
- // move the x and y
- if (goRight) {
- mCoordX += goX;
- } else {
- mCoordX -= goX;
- }
- if (goDown) {
- mCoordY += goY;
- } else {
- mCoordY -= goY;
- }
- }
- public int getSpeedX() {
- return mSpeedX;
- }
- public void setSpeedX(int speedX) {
- mSpeedX = speedX;
- }
- public int getmSpeedY() {
- return mSpeedY;
- }
- public void setSpeedY(int speedY) {
- mSpeedY = speedY;
- }
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- mDrawRect.set(mCoordX, mCoordY, mCoordX + mRealSize, mCoordY
- + mRealSize);
- canvas.drawRoundRect(mDrawRect, 0, 0, mInnerPaint);
- }
- public void setSize(int newSize) {
- mRealSize = newSize;
- }
- public int getSize() {
- return mRealSize;
- }
- }
外层视图。
小方块是一个独立的视图,这里不直接把小方块显示在Actiity中,在它的外面又“包”了一层。代码如下:
- public class DrawView extends View {
- private Rectangle mRectangle;
- public int width;
- public int height;
- public DrawView(Context context) {
- super(context);
- mRectangle = new Rectangle(context, this);
- mRectangle.setARGB(255, 255, 0, 0);
- mRectangle.setSpeedX(3);
- mRectangle.setSpeedY(3);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- invalidate();
- mRectangle.move();
- mRectangle.onDraw(canvas);
- }
- }
主界面。
获取屏幕的尺寸,并把相应的尺寸赋值给DrawView对象。最后,显示DrawView对象。代码如下:
- public class MainActivity extends Activity {
- private DrawView mDrawView;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Display display = getWindowManager().getDefaultDisplay();
- mDrawView = new DrawView(this);
- mDrawView.height = display.getHeight();
- mDrawView.width = display.getWidth();
- setContentView(mDrawView);
- }
- }
参考资料
http://developer.android.com/reference/android/graphics/Canvas.html
http://developer.android.com/guide/topics/graphics/2d-graphics.html
0 0
- 7、在Canvas上显示动画
- 在Canvas上显示动画
- 在 Canvas 上显示动画
- 【移动开发】在Canvas上显示动画
- android 开发技巧(6)--在 Canvas 上显示动画
- Hack7-在Canvas上绘制动画效果
- 50 Android Hacks Hack7 在canvas上绘制动画
- 如何读取xaml并显示在Canvas上
- Canvas使用drawImage()函数在画布上显示图像
- <canvas>学习笔记——如何在<canvas>上显示图片
- 打造高大上的Canvas粒子动画
- 打造高大上的Canvas粒子动画
- H5在canvas上截图
- WebGIS中地图瓦片在Canvas上的拼接显示原理(六)
- WebGIS学习(六)WebGIS中地图瓦片在Canvas上的拼接显示原理
- Androids上显示gif动画
- WinForm上显示gif动画
- h5 canvas 在canvas上画图 在canvas上写字 文字换行
- 当程序员老去
- 去除html标签
- JavaScript回顾(5)
- DBUtils 1.5 BUG 小记
- How to debug Dalvik and ARM code together
- 7、在Canvas上显示动画
- android(java.、C)编程中的那些技巧
- ubuntu下安装SVN
- 华为G520-T10移动版刷机包 基于官方 最新优化 精简 省电
- Express4环境搭建
- 关于GMAP开发
- web.xml解读(非常详细)
- iOS开发--从TQRichTextViewDemo中学会分析工程
- Eclipse 中 按 Ctrl+Shift+F 格式化代码时每行容纳的字符数