android基础绘图学习

android一直是作为自己的一项爱好在搞,年前已经把目前主流的东西做成个demo,

但是毕竟不是学java的,也不是专业干android的,基础不足,只是把东西东拼西凑的,汇总在一起。

一些很好用的第三方库,自己压根就写不出来,或者说是压根就不知道怎么去写。今年的目标就是能写点

自己的自定义控件出来(特别酷炫那种)。废话不多说了,进入正题吧。


屏幕参数

屏幕大小:屏幕对角线的长度,通常是寸来度量,4.7寸。

分辨率:手机屏幕的像素点个数.720*1280就是屏幕分辨率,宽宥720个像素点,高有1280个像素点。

PPI:每英寸像素,又被称为DPI.它是由对角线的像素点数除以屏幕的大小得到的,通常达到400PPI就已经是

非常高的屏幕密度了。


系统屏幕密度

各个厂商提供了不同的大小尺寸和像素密度的屏幕。以下定义了几个标准的DPI

密度

Ldpi

Mdpi

Hdpi

Xhdpi

Xxhdpi

密度值

120

160

240

320

480

分辨率

240*320

320*480

480*800

720*1280

1080*1920


独立像素密度dp

相同长度的屏幕,高密度的屏幕包含更多的像素点。Android系统使用mdpi即密度为160的屏幕作为标准,

在这个屏幕上1px=1dp。各分辨率直接换算比例,lpdi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12

dp描述长和宽,sp描述文字,正常1sp=1dp,当文字有大、极大的要求时,1sp>1dp

举例:一个文本框长100dp,在密度为160时,按100px显示。在密度为240时,按150px显示。即相同的dp

根据屏幕密度不同显示不同的大小。



2D绘图基础

系统提供canvas对象来提供绘图方法。Paint也是很重要的元素,有很多属性。

SetAntialias()//设置画笔的锯齿效果、setcolor//设置画笔的颜色、setARGB()//设置画笔的ARGB值、

setalpha()//设置画笔的alpha值、settextsize()//设置字体的尺寸、setsytle()//设置画笔的风格、setstrokewidth()

//设置空心边框的宽度。

根据画笔的不同,再结合不同的绘图api。这样任意组合就可以实现不同的绘图效果。

Canvas对象的各个函数:

绘制点:

Canvas.drawPoint(x,y,paint);

绘制直线:

Canvas.drawLine(startX,startY,endX,endY,paint);

绘制矩形:

Canvas.drawRect(left,top,right,bottom,paint);

绘制圆角矩形:

Canvas.drawRoundRect(left,top,right,bottom,radiusX,radiusY,paint);

绘制圆:

Canvas.drawCircle(circleX,circleY,radidu,paint);

绘制弧形、扇形:

Canvas.drawArc(left,top,right,bottom,startAngle,sweepAngle,useCenter,paint);

绘制椭圆:

Canvas.deawOval(left,top,right,bottom,paint);

绘制文本:

Canvas.drawText(text,startX,startY,paint);

指定位置绘制文本:

Canvas.drawPosText(text,newfloat[]{X1,Y1,X2,Y2…..Xn,Yn},paint);

绘制路径:

Canvas.drawPath(path,paint);


XML绘图

XMLandroid系统中不仅仅是java中的一个布局文件、配置列表,也可以变成一张画、一幅图。

Bitmap

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
android:src="@drawable/ic_launcher" />

这样就可以引用图片,并且直接将图片转化成Bitmap让我们在程序中使用。

Shape

通过shape可以在xml中绘制各种形状:


<shape xmlns:android=http://schemas.android.com/apk/res/android
	//默认为rectangle
	android:shape=["rectangle"|"oval"|"line"|"ring"]>
	<corners //当shape="rectangle"时使用
	//半径,会被后面的单个半径属性覆盖,默认为1dp
	android:radius="integer"
	android:topLeftRaduis="integer"
	android:topRightRadius="integer"
	android:bottomLeftRadius="integer"
	android:bottonRightRadius="integer"/>
	<gradient //渐变
	android:angle="integer"
	android:centerX="integer"
	android:centerY="integer"
	android:centerColor="integer"
	android:endColor="color"
	android:gradientRadius="integer"
	android:startColor="color"
	android:type=["linear"|"radial"|"sweep"]
	android:useLevel=["true"|"false"]/>
	<padding 
	android:left="integer"
	android:top="integer"
	android:right="integer"
	android:bottom="integer"/>
	<size	//指定大小,一般用在imageView配合scaleType属性使用
	android:witdh="integer"
	android:height="integer"/>
	<solid //填充颜色
	android:color="color"
	/>
	<stroke//指定边框
	android:width="integer"
	android:color="color"
	android:dashWidth="integer"//虚线宽度
	android:dashGap="integer"//虚线间隔宽度
	/>
</shape>

Shapexml绘图的精华所在。

Layer

Layer是在Photoshop中常用的功能。在android中同样可以通过Layer来实现类似Photoshop中图层的概念。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--图片1-->
<item 
	android:drawable="@drawable/ic_launcher"/>
<!--图片2-->
<item 
	android:drawable="@drawable/ic_launcher"
	android:left="10.0dip"
	android:top="10.0dip"
	android:right="10.0dip"
	android:bottom="10.0dip"
/>
</layer-list>

Selector

用于帮助开发者实现静态绘图中的事件反馈,通过给不同的事件设置不同的图像,从而在程序中根据用户输入,

返回不同的效果。

<selector xmlns:androd="http://schemas.android.com/apk/res/android">
	<!--默认时的背景图片-->
	<item android:drawable="@drawable/X1"/>
	<!--没有焦点时的背景图片-->
	<item android:state_window_focused="false"
		  android:drawable="@drawable/X2">
	<!--非触摸模式下获得焦点并单击时的背景图片-->
	<item android:state_window_focused="true"
		  android:state_pressed="true"
		  android:drawable="@drawable/X3">
	<!--触摸模式下单击时的背景图片-->
	<item android:state_window_focused="false"
		  android:state_pressed="true"
		  android:drawable="@drawable/X4">
	<!--选中图片时的图片背景-->
	<item android:state_selected="true"
		  android:drawable="@drawable/X5">
	<!--获得焦点时的图片背景-->
	<item 
		  android:state_focused="true"
		  android:drawable="@drawable/X5">
</selector>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值