当前位置: 首页 > 编程日记 > 正文

Android 中一些常用类的常用方法(Math、Random、Color、Paint、Canvas、Bitmap、BitmapFactory)...

1.java.lang.Math类常用的常量和方法:

Math.PI 记录的圆周率
Math.E 记录e的常量
Math.abs 求绝对值
Math.sin 正弦函数 Math.asin 反正弦函数
Math.cos 余弦函数 Math.acos 反余弦函数
Math.tan 正切函数 Math.atan 反正切函数 Math.atan2 商的反正切函数
Math.toDegrees 弧度转化为角度 Math.toRadians 角度转化为弧度
Math.ceil 得到不小于某数的最大整数
Math.floor 得到不大于某数的最大整数

例如:Math.floor(12.7) =12.0

Math.ceil(12.7) =13.0

ceil()是天花板,即向上取整。floor是地板,向下取整。round是四舍五入。

Math.IEEEremainder 求余
Math.max 求两数中最大
Math.min 求两数中最小
Math.sqrt 求开方
Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常

Math.sqrt(x):平方根
Math.pow(x,y):x的y次方

Math.exp 求e的任意次方
Math.log10 以10为底的对数
Math.log 自然对数
Math.rint 求距离某数最近的整数(可能比某数大,也可能比它小)
Math.round 同上,返回int型或者long型(上一个函数返回double型)
Math.random 返回0,1之间的一个随机数

java.math.BigInteger(大整数):
BigInteger bi1=new BigInteger("1234567890123456890");
BigInteger bi2=BigInteger.valueOf(123L);
bi1=bi1.add(bi2);//b1+b2
bi1=bi1.multiply(bi2);//b1*b2
bi1=bi1.subtract(bi2);//b1-b2
bi1=bi1.divide(bi2);// b1/b2

java.math.BigDecimal(大浮点数):
BigDecimal bd = new BigDecimal("3.1415926");
bd = bd.setScale(2,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位


2.Java获取随机数

随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串、数字。或者随即生成一个不定长度的数字、或者进行一个模拟的随机选择等等。Java提供了最基本的工具,可以帮助开发者来实现这一切。

2.1、Java随机数的产生方式

在Java中,随机数的概念从广义上将,有三种。
  1、通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。
  2、通过Math.random()返回一个0到1之间的double值。
  3、通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大。

2.2、Random类API说明

2.2.1、Java API说明
  Random类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 节)。

如果用相同的种子创建两个Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证属性的实现,为类 Random 指定了特定的算法。 很多应用程序会发现 Math 类中的 random 方法更易于使用。
2.2.2、方法摘要
  Random() 创建一个新的随机数生成器。
  Random(long seed) 使用单个 long 种子创建一个新随机数生成器:
public Random(long seed) { setSeed(seed); } next 方法使用它来保存随机数生成器的状态。
  protected int next(int bits) 生成下一个伪随机数。
  boolean nextBoolean() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。
  void nextBytes(byte[] bytes) 生成随机字节并将其置于用户提供的字节数组中。
  double nextDouble() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0之间均匀分布的 double 值。
  float nextFloat() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 float 值。
  double nextGaussian() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。
  int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
  int nextInt(int n) 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。
  long nextLong()  返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。
  void setSeed(long seed)  使用单个 long 种子设置此随机数生成器的种子。

2.3、Random类使用说明

2.3.1、带种子与不带种子的区别
  Random类使用的根本是策略分带种子和不带种子的Random的实例。
  通俗说,两者的区别是:
  带种子的,每次运行生成的结果都是一样的。
  不带种子的,每次运行生成的都是随机的,没有规律可言。
  2.3.2、创建不带种子的Random对象
  Random random = new Random();
  2.3.3、创建不带种子的Random对象
  有两种方法:
      1) Random random = new Random(555L); 
      2) Random random = new Random(); 
      random.setSeed(555L);


3.Color(颜色)类

1.颜色的常用表示方法

Android系统中颜色的常用表示方法有以下4种:

(1)int color = Color.BLUE;

(2)int color = Color.argb(150,200,0,100);

(3)int color = Color.parseColor("#ffffff");(150,200,0,100);

(4)在xml文件中定义颜色;

2.颜色常量及其表示的颜色

在实际应用当中,我们常用的颜色有以下一些,其颜色常量及其表示的颜色如下所示:

Color.BLACK 黑色

Color.GREEN 绿色

Color.BLUE 蓝色

Color.LTGRAY 浅灰色

Color.CYAN 青绿色

Color.MAGENTA 红紫色

Color.DKGRAY 灰黑色

Color.RED 红色

Color.YELLOW 黄色

Color.TRANSPARENT 透明

Color.GRAY 灰色

Color.WHITE 白色

4.Paint类介绍

Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。

1.图形绘制

setARGB(int a,int r,int g,int b); 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。
setAlpha(int a); 设置绘制图形的透明度。
setColor(int color); 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。
setAntiAlias(boolean aa); 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
setDither(boolean dither); 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
setFilterBitmap(boolean filter); 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示速度,本设置项依赖于dither和xfermode的设置
setMaskFilter(MaskFilter maskfilter); 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等
setColorFilter(ColorFilter colorfilter); 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果
setPathEffect(PathEffect effect); 设置绘制路径的效果,如点画线等
setShader(Shader shader); 设置图像效果,使用Shader可以绘制出各种渐变效果
setShadowLayer(float radius ,float dx,float dy,int color); 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色
setStyle(Paint.Style style); 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
setStrokeCap(Paint.Cap cap); 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式Cap.ROUND,或方形样式Cap.SQUARE
setSrokeJoin(Paint.Join join); 设置绘制时各图形的结合方式,如平滑效果等
setStrokeWidth(float width); 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度
setXfermode(Xfermode xfermode); 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果

2.文本绘制

setFakeBoldText(boolean fakeBoldText); 模拟实现粗体文字,设置在小字体上效果会非常差
setSubpixelText(boolean subpixelText); 设置该项为true,将有助于文本在LCD屏幕上的显示效果
setTextAlign(Paint.Align align); 设置绘制文字的对齐方向
setTextScaleX(float scaleX); 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果
setTextSize(float textSize); 设置绘制文字的字号大小
setTextSkewX(float skewX); 设置斜体文字,skewX为倾斜弧度
setTypeface(Typeface typeface); 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等
setUnderlineText(boolean underlineText); 设置带有下划线的文字效果
setStrikeThruText(boolean strikeThruText); 设置带有删除线的效果


5.Canvas(画布)类

画笔属性设置好之后,还需要将图像绘制到画布上。Canvas类可以用来实现各种图形的绘制工作,如绘制直线、矩形、圆等等。Canvas绘制常用图形的方法如下:

绘制直线:canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint);

绘制矩形:canvas.drawRect(float left, float top, float right, float bottom, Paint paint);

绘制圆形:canvas.drawCircle(float cx, float cy, float radius, Paint paint);

绘制字符:canvas.drawText(String text, float x, float y, Paint paint);

绘制图形:canvas.drawBirmap(Bitmap bitmap, float left, float top, Paint paint);


6.Bitmap和BitmapFactory

Bitmap是Android系统中的图像处理的最重要的类之一。用它可以获取图像文件信息,对图像进行旋转,剪切,放大,缩小等操作。

Bitmap代表一张位图,使我们在开发中常用的资源,下面就对Bitmap进行简单的介绍。
Bitmap的获取方法:

1、使用BitmapDrawable

BitmapDrawable里封装的图片就是一个Bitmap对象,我们要把Bitmap包装成BitmapDrawable对象,可以调用BitmapDrawable的构造方法:
BItmapDrawbale drawable = new BItmapDrawable(bitmap);
如果要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap()方法:
Bitmap bitmap = drawbale.getBitmap();

2、Bitmap提供了一些静态方法来创建Bitmap对象(仅列举几个):

createBitmap(Bitmap source,int x,int y,int width,int height):从原位图source的指定坐标(x,y)开始,从中挖取宽width,高heigtht的一块出来,创建新的Bitmap对象。
createScaledBitmap(Bitmap source,int width,ing height,boolean fliter):对源位图进行缩放,缩放称宽width,高heigth的新位图。
createBitmap(int width,int height,Bitmap.Config config):创建一个宽width,高height的可变的新位图。
createBitmap(Bitmap source, int x,int y,int width,int height ,Matrix m,boolean fliter):从源位图source的指定坐标(x,y)开始,挖取宽width,高height的一块来,创建新的Bitmap对象,并按照Matrix指定的规则进行变换。

3、通过对资源文件的解析获取Bitmap对象,在这里就要用到BitmapFactory这个工具类,提供的方法如下:

decodeByteArray(byte[] data, int offset,int length):从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象。
decodeFIle(String pathName):从pathName指定的文件中解析、创建Bitmap对象。
decodeFileDescriptor(FileDescriptor fd):用于从FileDescriptor对应的文件中解析、创建Bitmap对象。
decodeResource(Resource res,int id):用于根据给定的资源ID从指定的资源文件中解析、创建Bitmap对象。
decodeStream(InputStream is):用于从指定输入流中介解析、创建Bitmap对象。

但是,在系统不断的解析、创建Bitmap的过程中,可能会由于内存小或其他原因,导致程序运行时发生OutOfMemory错误。
为此,Android为Bitmap提供了内存回收方法:
void recycle():强制回收Bitmap对象。
还有用于判断Bitmap 对象是否被回收的方法:
boolean isRecycle();


相关文章:

效果很好的asp.net的数据库访问模型(优化,封装一体化)

效果很好的asp.net的数据库访问模型(优化,封装一体化) 非常有效的数据库/配置文件访问模型。成功使用在几万流量的网站上。任何建议欢迎大家交流。 在使用SqlCommand对象过程中,我们需要分配Connection对象。 通常,对于…

【技巧——windows】直接登陆到桌面,免去输入密码

关于这个问题其实我很早之前就研究过,只是一直都是弄一次就不管了,下次就忘记怎么弄了,又去查,现在就写个笔记吧。 win8/8.1 在开始的界面输入netplwiz,或者点击winr打开运行,输入netplwiz,然后…

虚商烦恼多?不在怕的!你距离享受高效虚商控制台只差一步的距离

摘要:虚商烦恼多?不在怕的!你距离享受高效虚商控制台只差一步的距离虚商自助服务平台 vco.console.aliyun.com/原文链接本文为云栖社区原创内容,未经允许不得转载

Shark Hive Spark Hadoop2 进行整合的测试。

本文目的是测试将shark和hadoop2进行整合。 本来打算使用Shark 最新版0.9.0 ,但是官方好像还没有针对与Hadoop2的正式下载地址。(这个要说明一下,官方只提供了源码,并没有找到编译好的0.9.0 for hadoop2 ,也许需要自己…

nginx反向代理-多端口映射

2019独角兽企业重金招聘Python工程师标准>>> 代码解释 1.1 http:www.baidu.test.com默认是80,访问“/”利用反向代理,然后访问本地8083; 1.2 8083代表本地的前端工程访问地址,前端需要访问后台数据,”/”…

程序员期末试卷_第三部分复习提纲.doc下载

程序员期末试卷_第三部分复习提纲.doc下载 转载于:https://www.cnblogs.com/dtdnh520/archive/2007/01/20/625390.html

IDEA IntelliJ 如何新建一个不用任何框架的web项目

step 1 step 2 step 3 step 4 step 5 step 6 结果: 导包 找到jsp-api.jar和servlet-api.jar 建包(web项目不建议直接在src目录下新建类)

坑爹系列1--Log

今天的Log信息有的能打有的不能打,甚是奇怪,高了半天明白了,常见的几个问题就不说了,说我这个奇怪的。看下面的内容,那个能打印呢? 1 2 3 4 5 Log.v("交易返回码:log", " "); Log.v(&q…

避免资源死锁:识别已打开的事务

死锁往往由于以下原因引起:1、程序错误,比如一个事务需要操作两个表,由于程序错误在有时是先操作a表后操作b表,有时是先操作b表后操作a表,就有机会互相等待而造成死锁。2、事务太大,大事务操作的表多&#…

【vivado】debug hub时钟不匹配

报错,没有debug core! the clock connected to the debug hub (dbg_hub) core 根因是在调试中,这个debug hub没有工作。 下图两个ila_0,ila_1,分别对应两个时钟clk_out1, clk_out2,然后连到一个hub上。 默认…

IDEA IntelliJ 如何给web项目配置tomcat

step 1 step 2 step 3(重复step 1) step 4 step 5 step 6 结果

使用 spring boot 开发通用程序

2019独角兽企业重金招聘Python工程师标准>>> tag: spring 学习笔记date: 2018-03spring 是什么?spring 核心是应用组件容器,管理组件生命周期,依赖关系,并提倡面向接口编程实现模块间松耦合。 spring boot 是什么&…

java.utilDate和java.sql.Date

java.utilDate和java.sql.Date由广州疯狂软件教育java培训分享: java程序中的时间类型有java.util.Date和java.sql.Date两种。两者之间的关系和转化如下: java.sql.Date是java.util.Date的子类,所以可以直接将java.sql.Date类型的对象赋值给j…

Oracle 10G重建EM DB Control.

Oracle 10G R2重建EM DB Control.如果安装后没有修改过IP地址或机器名字,可以跳过下面1和2两步。1.drop configuration files and repository run :emca -deconfig dbcontrol db -repos drop 2. Logon SQLPLUS as user SYS or SYSTEM, and drop the sysman account and mangem…

IDEA IntelliJ 如何快速查看一个类里面包含哪些方法

主页面停留在那个类上 点击屏幕左侧的Structure

ACM 关于521

关于521 时间限制:1000 ms | 内存限制:65535 KB难度:2描述Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去。 浏览网页的流年忽然看到了网上有人用玫瑰花瓣拼成了521三个数字,顿时觉得好浪漫&#…

搭建本地https

生成证书 1. 使用openssl生成密钥privkey.pem: openssl genrsa -out privkey.pem 1024/2038 2. 使用密钥生成证书server.pem: openssl req -new -x509 -key privkey.pem -out server.pem -days 365 证书信息可以随便填或者留空,只有Common Na…

(转载)新年——顺民的牢骚

我是一个顺民,顺的不能再顺的民!相信很多人和我一样,即使心中有很多的不满,也只是偶尔发发牢骚,而且,大多时,还不敢在人多的时候发!即使在昏暗的灯光下的某个角落写写BLOG&#xff0…

IDEA IntelliJ 如何设置网站的欢迎页面

网站的目录结构如下 在web>WEB-INF>web.xml 文件中设置login.html为欢迎页面(运行跳出的第一个页面)

nyoj19 全排列

http://acm.nyist.net/JudgeOnline/status.php?pid19 1 #include<stdio.h>2 #include<stdlib.h>3 int n,a[10];4 bool vis[10];//标示数字是否被用过 5 void f(int k,int m)//k用来给a中第k个元素赋值&#xff0c;m表示还需要寻找的数字个数 6 {7 for(int i1;…

vue中动态样式不起作用? scoped了解一下

vue中style标签使用属性scoped的注意事项 style上添加属性scoped可以实现样式私有化&#xff0c;但是在使用动态样式时&#xff0c;样式会不起作用。可以先去掉scoped转载于:https://www.cnblogs.com/zuojiayi/p/9364347.html

有关cmd.Parameters.Clear()

// detach the SqlParameters from the command object, so they can be used again.cmd.Parameters.Clear(); 这句话在某些时候非常有用,比如说你在一个事务中调用了2个以上的存储过程,而恰巧这两个存储过程又有同样的参数,(例如 p_Name) 这时不加cmd.Parameters.Clear() 就会…

IDEA IntelliJ 如何设置web项目的热部署

这里的热部署指不需要重启服务器&#xff0c;刷新页面就可以反应页面&#xff08;仅限html和JSP&#xff09;的改动 step1 step2 效果 原来的html页面 在IntelliJ中进行修改 回到Chrome&#xff0c;点击 结果

SQL Server 2012 OFFSET/FETCH NEXT分页示例

原文&#xff1a;http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-side-paging-demo-using-offsetfetch-next.aspx?utm_sourcebrnewsletter&utm_mediumemail&utm_campaign2012Apr SQL Server 2005 引入了 ROW_NUMBER…

python数据库学习--Mysql

摘要&#xff1a; Python使用mysql需要安装驱动&#xff0c;有两种1&#xff09;mysqldb 2&#xff09;umysql &#xff0c;两者都是开源&#xff0c;具体区别不详&#xff0c;umysql没用过 一、mysqldb 安装MySQL驱动--http://www.codegood.com/archives/129 提供下载…

master page頁面如何用js來做輸入驗證

問&#xff1a;在使用了master page後&#xff0c;內容頁就沒有html標識了&#xff0c;那麼取得內容頁面控件的cilentID地方法也不一樣&#xff0c;我不知道用js怎麼取得這個cilentID,請各位大大幫忙告知如何寫這個js,並對其進行驗證.答&#xff1a;你可以先浏览一下页面&#…

scanf与空格

1.scanf的%c格式可以读入空格和换行 例&#xff1a; #include<cstdio> int main(){int a;char c,str[10];scanf("%d%c%s",&a,&c,str);printf("a%d,c%c,str%s",a,c,str);return 0;}2.字符数组使用%s读入的时候以空格跟换行为读入结束的标识 …

java 读取文件,内容方置Person 并写到另外地址

a.txt 文本内容如下&#xff1a; nameuserage34imageaa.PNGurlE:\\ package cn.com.test05;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream;class Person{String name;int…