复制简书上一篇基础文章

复制简书上一篇基础文章,很基础但是很受用  原文地址


本章主要介绍的是Android的绘图机制和处理技巧

1.屏幕尺寸的信息:

  • 屏幕参数有屏幕大小即屏幕对角线的长度,用“寸”来表示、分辨率PPI即每英寸像素,它由对角线的像素点除以屏幕大小获得。
  • 系统屏幕密度如下
    ldpi---120---240X320分辨率
    mdpi---160---320X480分辨率
    hdpi---240---480X800分辨率
    xhdpi---320---720X1280分辨率
    xxhdpi---480---1080X1920分辨率

2.单位转换工具类(这种百度一堆 在此省略)

3.2D绘图基础:
Paint类的一些属性和对应的功能:

  • setAntiAlias();//设置画笔的锯齿效果
  • setColor();//设置画笔的颜色
  • setARGB();//设置画笔的A,R,G,B的值
  • setAlpha();//设置画笔的Alpha值
  • setTextSize();//设置字体的尺寸
  • setStyle();//设置画笔的风格(空心或者实心)
  • setStrokeWidth();//设置空心边框的宽度
    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,radius,paint);//绘制圆
  • canvas.drawOval(left,top,right,bottom,paint);//通过椭圆的外接矩形来绘制椭圆
  • canvas.drawText(text,startX,startY,paint);//绘制文字
  • canvas.drawPosText(text,new float[]{x1,y1,...,xn,yn},paint);//指定位置绘制文本
  • //绘制多条直线
    float[] pts={
    startX1,startY1,endX1,endY1
    ......
    startXn,startYn,endXn,endYn}
    canvas.drawLines(pts,paint);
    //绘制路径
    Path path=new Path();
    path.moveTo(50,50);
    path.lineTo(100,100);
    path.lineTo(300,50);
    canvas.drawPath(path,paint)
    //绘制弧形或扇形
    canvas.drawArc(left,top,right,bottom,startAngle,sweepAngle,useCenter,paint);
    这里useCenter传入true则绘制扇形 反之绘制弧形

4.Android的Xml绘图:

  • Bitmap:
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
      android:src="@drawable/ic_launcher"/>
    这样就能直接将图片转成bitmap在程序中使用了
  • Shape:

    <shape xmlns:android="http://schemas.android.com/apk/res/android"
      android:shape="line|oval|ring|rectangle">
      <!--默认为rectangle-->
      <corners
          android:bottomLeftRadius="integer"
          android:bottomRightRadius="integer"
          android:radius="integer"
          android:topLeftRadius="integer"
          android:topRightRadius="integer" />
      <!--当shape为rectangle时才有,radius默认为1dp-->
    
      <gradient
          android:angle="integer"
          android:centerColor="color"
          android:centerX="integer"
          android:centerY="integer"
          android:endColor="color"
          android:gradientRadius="integer"
          android:startColor="color"
          android:type="linear|radial|sweep"
          android:useLevel="boolean" />
    
      <padding
          android:bottom="integer"
          android:left="integer"
          android:right="integer"
          android:top="integer" />
    
      <size
          android:width="integer"
          android:height="integer" />
      <!--指定大小,一般用在imageview配合scaleType使用-->
    
      <solid android:color="color" />
      <!--填充颜色-->
      <stroke
          android:width="integer"
          android:color="color"
          android:dashGap="integer"
          android:dashWidth="integer" />
      <!--边框,dashGap为虚线间隔宽度,dashWidth为虚线宽度-->
    </shape>
  • Layer:大家可以自己试试效果 这里就不贴图了
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:drawable="@mipmap/ic_launcher" />
      <item
          android:drawable="@mipmap/ic_launcher"
          android:left="10dp"
          android:top="10dp" />
      <item
          android:drawable="@mipmap/ic_launcher"
          android:left="20dp"
          android:top="20dp" />
    </layer-list>
  • Selector:
    通常用于view的触摸反馈
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_pressed="true">
          <shape android:shape="rectangle">
              <solid android:color="#334444" />
          </shape>
      </item>
      <item android:state_pressed="false">
          <shape android:shape="rectangle">
              <solid android:color="#444444" />
          </shape>
      </item>
    </selector>

5.Android绘图技巧:
canvas.save():保存之前在画布上的操作,之后的操作就像是在新的图层操作一样。
canvas.restore():可以理解为Photoshop中合并图层的操作,作用是将save后的图层与之前的图层合并。
canvas.translate():将画布进行平移。
canvas.rotate():将画布进行旋转。这两个方法都是用来简化绘图而创建的。
canvas.saveLayer():创建一个图层,并将他加入一个图层的栈,通过调用restore或者restoreToCount使其出栈,出栈后会把图像绘制到上层canvas上。
canvas.saveLayerAlpha():同上,区别是可以设置图层的透明度



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值