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

news/2024/7/3 2:37:08

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();



http://lihuaxi.xjx100.cn/news/236595.html

相关文章

hdu 1724 Ellipse——辛普森积分

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1724 #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define db double using namespace std; const db eps1e-5; int T;db a,b,l,r; db f(db x){return sqrt(…

地图测量面积工具app_全站仪的使用面积测量

测量与地图制作见习全站仪使用11 / 20#2020 #全站仪是全站型电子速测仪的简称&#xff0c;是电子经纬仪、光学测距仪及微处理器相结合的光电仪器。其可直接测量距离、角度、坐标&#xff0c;根据三角函数原理&#xff0c;已知两点坐标信息推算出无数个第三点的坐标信息。下面让…

1196: 数星星(二)(结构体专题)_福利:最新导数6大专题!高分段提分有困扰?听北大状元漫谈提分...

这是一篇适合数学120分以上的高中生深度研读的随感。文末有福利&#xff01;振宇老师从教的十几年中&#xff0c;遇到高分段学生最大的困扰便是&#xff1a;130分以上每提一分便需要付出极大的努力。究其原因&#xff0c;便是思维不够严谨全面&#xff0c;无法拿全分&#xff0…

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

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

http协议进阶(三)http报文

一、报文流 http报文是在http应用程序之间发送的数据块&#xff08;也可称为数据包&#xff09;、这些数据块以一些文本的元信息&#xff08;meta-information&#xff09;开头&#xff0c;描述了报文的内容及含义&#xff0c;后面跟着 可选的数据部分&#xff0c;这些报文在客…

nginx反向代理-多端口映射

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

静茹docker容器的几种方法_Docker介绍及使用

什么是容器&#xff1f;容器就是在隔离的环境运行的一个进程&#xff0c;如果进程停止&#xff0c;容器就会销毁。隔离的环境拥有自己的系统文件&#xff0c;ip地址&#xff0c;主机名等&#xff0c;kvm虚拟机&#xff0c;linux&#xff0c;系统文件程序&#xff1a;代码&#…

【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

这是我悲惨的接近爆零的一次考试&#xff0c;但是本蒟蒻不能放弃&#xff0c;还是要总结的QAQ 答题卡 【题目背景】 八月是个悲惨的月份。先不谈炎热的天气&#xff0c;对于新生来说&#xff0c;八月意味着军训&#xff1b; 而对于高二高三的同学来说&#xff0c;八月意味着开学…