android创建画布,创建自定义视图在Android矩阵效果画布教程

介绍 下面是一个快速教程,教你如何在Android中创建自定义视图。自定义视图创建一个矩阵雨效果。 本教程发布在http://www.androidlearner.com/。 背景 下面是关于如何工作的小背景: 自定义视图 View是表示用户界面组件的基本构建块的类。有时候,没有人想使用Android提供的默认小部件,而想要一些花哨的组件。 因此,如何获得自定义组件是构建自己的。但是,我想尝试一下canvas。所以我决定创建矩阵雨的效果。下面是对矩阵效应的简要描述。 矩阵雨的影响 矩阵效应是一个流行的效果,随机字符从顶部落下,创造一个雨的效果。“简介”不是。 让我来解释一下如何设计矩阵雨效应 现在,在开始在canvas中编写视图代码之前,让我解释一下canvas矩阵效果的设计是如何工作的。看看下面的图片 搭建Android Studio 首先,让我们设置Android studio。我不会在这里解释如何安装Android studio。外面已经有很多资源了。 首先,让我们创建一个空活动项目。构建并运行应用程序以检查是否一切正常。 使用的代码 1. 创建一个矩阵效果类,扩展视图: 隐藏,复制Code

public class MatrixEffect extends View {

public MatrixEffect(Context context, AttributeSet attrs) {

super(context, attrs);

}

}

2. 让我们建立一些需要的初始变量: 隐藏,复制Code

int width = 1000000; //default initial width

int height = 100; //default initial height

Canvas canvas =null; //default canvas

Bitmap canvasBitmap; //Bitmap used to create the canvas

int fontSize = 15; //font size of the text which will fall

int columnSize = width/fontSize; //column size ; no of digit required to fill the screen

int parentWidth;

String text = "MATRIXRAIN"; // Text which need to be drawn

char[] textChar = text.toCharArray(); // split the character of the text

int textLength = textChar.length; //length of the length text

Random rand = new Random(); //random generater

int[] textPosition; // contain the position which will help to draw the text

3.现在让我们创建一个函数来绘制文本在位图上,这是我们的画布: 隐藏,复制Code

void drawText()

{

//Set up the paint

Paint paint = new Paint();

paint.setStyle(Paint.Style.FILL);

paint.setColor(Color.GREEN);

paint.setTextSize(15);

//loop and paint

for(int i =0 ;i

check="" draw="" fontsize="" has="" i=""

if="" not="" or="" paint=""

position="" rand.nextint="" random=""

reached="" text="" textchar=""

textlength="" textposition="" the=""> height && Math.random() > 0.975)

textPosition[i] = 0; // change text position to zero when 0 when text is at the bottom

textPosition[i]++; //increment the position array

}

}

上面的函数负责在画布上以随机的位置从上往下画文本,让它们下落,并检查文本是否到达底部位置。然后将文本位置更改为顶部。 4. 现在用alpha组件在位图上绘制文本: 隐藏,复制Code

public void canvasDraw()

{

//set the paint for the canvas

Paint paint = new Paint();

paint.setColor(Color.BLACK);

paint.setAlpha(5);

paint.setStyle(Paint.Style.FILL);

canvas.drawRect(0, 0, width, height, paint);//draw rect to clear the canvas

drawText(); // draw the canvas

}

为了得到trail效果,我们将alpha组件添加到位图中,这样当一个位图被绘制到另一个trail效果上时就会出现。 5. 现在主要的绘制函数,将使绘制完成绘制周期,并使其位图可见的视图。我们已经覆盖了View类的Draw()函数。 隐藏,复制Code

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

Paint paint = new Paint();

paint.setColor(Color.BLACK);

canvas.drawBitmap(canvasBitmap,0,0,paint); //draw the bitmap to canvas

canvasDraw(); // call the draw command

//Redraw the canvas

invalidate();

}

在这里,invalidate ();函数一次又一次地调用draw。因此,我们的位图会在画布上反复绘制。 6. 问题仍然是如何使视图以不同的大小运行。为此,我使用的解决方案是覆盖视图的onSizeChange方法。 隐藏,复制Code

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

width= w;

height = h;

super.onSizeChanged(w, h, oldw, oldh);

//create a Bitmap

canvasBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

canvas = new Canvas(canvasBitmap); //set the canvas

// init paint with black rectangle

Paint paint = new Paint();

paint.setColor(Color.BLACK);

paint.setAlpha(255); //set the alpha

paint.setStyle(Paint.Style.FILL);

canvas.drawRect(0, 0, width, height, paint);

columnSize = width/fontSize;

//initalise the textposiotn to zero

textPosition = new int[columnSize+1]; //add one more drop

for(int x = 0; x < columnSize; x++)

textPosition[x] = 1;

}

此方法创建与屏幕大小相同的画布。 7. 现在我们的自定义视图已经准备好了。让我们把它添加到布局中。 打开你的主活动布局文件并添加视图: 隐藏,复制Code< scrap.app.skd.matrixeffect。MatrixEffect android: layout_width = " match_parent " android: layout_height = " match_parent " /比; scrap.app.skd.matrixeffect。矩阵效应是视图的类。 8. 现在运行这个应用程序,在你的手机上看到矩阵雨。 要从github获取完整的画布源代码: https://github.com/sapandang/Android-Custom-View-Matrix-Rain-Effect 的兴趣点 那么,本教程对你有什么帮助呢?最有可能什么都没有。但是,你可以使用canvas来创建一个实时壁纸。: P 本文转载于:http://www.diyabc.com/frontweb/news30384.html

雷林鹏分享:jQuery EasyUI 数据网格 - 创建自定义视图

jQuery EasyUI 数据网格 - 创建自定义视图 在不同的情况下,您可能需要为数据网格(datagrid)运用更灵活的布局.对于用户来说,卡片视图(Card View)是个不错的选择.这个工具 ...

使用Kotlin开发Android应用(IV):自定义视图和Android扩展

在读完扩展函数和默认值这篇文章之后,那么接下来要介绍什么呢?在本系列第一篇文章中我们说过,Kotlin使得Android开发更加简单,本文我们将进一步作介绍. 自定义视图 你应该还记得,在说到Kotl ...

&lbrack;Swift实际操作&rsqb;九、完整实例-&lpar;7&rpar;登录页面:创建自定义视图及相关组件Swift实际操作

本文将开始创建登录页面,首先创建该页面所需的一些自定义组件:做为登录按钮的自定义视图对象.在[RegLogin]组的名称上点击鼠标右键,打开右键菜单.[New File]->[Cocoa Tou ...

(翻译)为你的MVC应用程序创建自定义视图引擎

Creating your own MVC View Engine For MVC Application 原文链接:http://www.codeproject.com/Articles/29429 ...

使用Xib创建自定义视图(不是cell)时需要注意的问题

开发项目过程中,有些地方不免会用到Xib来提高开发效率,如果你的手速够快,写代码建视图,我并不反对这样做.因为我以前也是纯手写代码开发. 进入正题,Xib好用,但是这些下面这些问题需要注意一下. 问题 ...

&num;&num;DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告

##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...

UI 自定义视图 &comma;视图管理器

一>自定义label - textField 视图 自定义视图:系统标准UI之外,自己组合而出的新的视图 iOS 提供了很多UI组件 ,借助它们,我们可以做各种程序 尽管如此,实际开发中,我们还 ...

Android 自定义View修炼-自定义HorizontalScrollView视图实现仿ViewPager效果

开发过程中,需要达到 HorizontalScrollView和ViewPager的效果,于是直接重写了HorizontalScrollView来达到实现ViewPager的效果. 实际效果图如下: ...

Android自定义视图二:如何绘制内容

这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

随机推荐

javaSE基础02

javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...

熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】

软件环境:Win7+MDK4.7.2 硬件环境:STM32F4Discovery 所用OS代码:RT-Thread2.0.0 beta 下载地址: https://github.com/RT-Thre ...

oracle V&dollar;SESSION各个字段的含义

源地址:https://zhidao.baidu.com/question/345549929.html SADDR - session addressSID - session identifier ...

SQL Server2008如何设置开启远程连接

登陆SQL Server 2008(windows身份认证),登陆后右击,选择“属性”. 2 左侧选择“安全性”,选中右侧的“SQL Server 和 Windows 身份验证模式”以启用混合登录模式 ...

SQLServer中在视图上使用索引(转载)

在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你 ...

linux 程序或服务开机自启动

chkconfig --level 35 服务名 on或写启动脚本到/etc/rc.local/下

vim 设定一个新的snippets

目录 ~/.vim/bundle/vim-snippets/snippets 编辑 _.snippets 在最后添加一行自己需要的,比如想要个自己的名字,然后按tab,即出现全称,可以添加如下内容 s ...

关于PHP魔术方法&lowbar;&lowbar;call的一点小发现

好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现. 我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性.而魔术方 ...

Java 架构师之路&lpar;1&rpar;

本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路.如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员 ...

VB 用代码创建的控件和接收事件

在声明公共变量的位置加上这句就可以了 Dim WithEvents NewButton As Button form_load中添加 NewButton = New Button        New ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值