Android自定义View中Paint、Rect、Canvas介绍(一)

自定义View对于新手而言貌似是一个很复杂的东西。格式,各函数的意义。对于大神经常忘记各函数及一些参数的具体写法及意义,刚好在做一个风车效果,把过程及遇到的问题都写下来

1、如何自定义一个View

public class LeafView extends View {
  private String TAG = "--------LeafView";
  public LeafView(Context context, AttributeSet attrs) {
    super(context, attrs);

    Log.i(TAG, "我是自定义View: LeafView");
  }
}
<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="100dp"
  android:orientation="vertical"
  android:background="@color/colorPrimary"
  >

  <com.my.LeafView
    android:id="@+id/leafView"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_gravity="center_horizontal"
    />
 </LinearLayout>

上面就是自定义了一个LeafView最简单的写法。当然界面上什么都不会显示,除了LinearLayout的背景色

2、onDraw(Canvas canvas)方法

我们现来看下面一段代码,画出一个红色的正方形

public class MyView extends View {
  private String TAG = "--------MyView";
  private int width, height;
  public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);

  }

  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    width = w;
    height = h;
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Rect rect = new Rect(0, 0, width, height);
    Paint paint = new Paint();
    paint.setColor(Color.RED);
    canvas.drawRect(rect, paint);
  }
}

通过看上面代码,有一个onSizeChanged()、onDraw()、canvas.drawRect()方法,有一个Paint, Rect, Canvas类

1、onSizeChanged() 当View的大小发生改变时,会调用此方法。这里我们获取View的长和宽

2、onDraw(Canvas canvas) 这个方法就是自定义View的核心。绘制各种图形

  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Rect rect = new Rect(0, 0, width, height);
    Paint paint = new Paint();
    paint.setColor(Color.RED);
    canvas.drawRect(rect, paint);
  }

Canvas(画布)类

可以用来实现各种图形的绘制工作,如绘制直线、矩形、圆等等

1、绘制直线:canvas.drawLine();

2、绘制矩形:canvas.drawRect();

3、绘制圆形:canvas.drawCircle();

4、绘制字符:canvas.drawText();

5、绘制图形:canvas.drawBirmap();

Paint(画笔)类

要绘制图形,首先得调整画笔,按照自己的开发需要设置画笔的相关属性

1、setAntiAlias():设置画笔的锯齿效果

2、setColor():设置画笔的颜色

3、setARGB():设置画笔的A、R、G、B值

4、setAlpha():设置画笔的Alpha值

5、setTextSize():设置字体的尺寸

6、setStyle():设置画笔的风格(空心或实心)

7、setStrokeWidth():设置空心边框的宽度

8、getColor():获取画笔的颜色

Rect(尺寸)类

设置画布大小new Rect(int left, int top, int right, int bottom)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android自定义View实现飘动的叶子效果(三)

    上一篇对自定义View及一些方法有所了解,下面做一个简单的叶子飘动的例子 主要技术点 1.添加背景图片canvas.drawBitmap() 2.Matrix动画类 3.Matrix添加到画布上 步骤 1.添加黄色背景颜色 public LeafView(Context context, AttributeSet attrs) { super(context, attrs); bgPaint = new Paint(); bgPaint.setColor(mResources.getColor(

  • Android自定义View叶子旋转完整版(六)

    上一篇实现多叶子飘动旋转,今天完成最后的功能. 1.添加右侧旋转枫叶 2.添加滑动条效果,显示百分比 3.修复叶子飘出边框问题 1.添加右侧旋转叶子 Bitmap turnBitmap = ((BitmapDrawable) mResources.getDrawable(R.drawable.fengshan, null)).getBitmap(); int turnLeafAngle = 0; private void setTurnLeaf(Canvas canvas) { Matrix m

  • Android自定义View实现广告信息上下滚动效果

    先看看效果: 实现代码: public class ScrollBanner extends LinearLayout { private TextView mBannerTV1; private TextView mBannerTV2; private Handler handler; private boolean isShow; private int startY1, endY1, startY2, endY2; private Runnable runnable; private Li

  • Android自定义View绘制的方法及过程(二)

    上一篇<Android 自定义View(一) Paint.Rect.Canvas介绍>讲了最基础的如何自定义一个View,以及View用到的一些工具类.下面讲下View绘制的方法及过程 public class MyView extends View { private String TAG = "--------MyView"; private int width, height; public MyView(Context context, AttributeSet a

  • Android自定义View实现叶子飘动旋转效果(四)

    上一篇实现了叶子飘动功能,<Android自定义叶子飘动> 现在实现旋转效果 要实现这个效果,要在之前的功能上添加2个功能 1.通过matrix.postTranslate(int x, int y)在添加在Y轴上滑动 2.通过matrix.postRotate(float degrees, float px, float py)实现叶子旋转 代码实现 1.获取Y坐标 private float getMatrixY() { float w = (float) ((float) 2 * Mat

  • Android自定义View圆形进度条控件(三)

    继续练习自定义View,这次带来的圆形进度条控件与之前的圆形百分比控件大同小异,这次涉及到了渐变渲染以及画布旋转等知识点,效果如下: 虽然步骤类似,但是我还是要写,毕竟基础的东西就是要多练 1.在res/values文件夹下新建attrs.xml文件,编写自定义属性: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Circ

  • Android 自定义View的使用介绍

    在项目开发中,可能系统自带的一些widget不能满足我们的需求,这时就需要自定义View. 通过查看系统中的常用widget如Button,TextView,EditText,他们都继承自View,所以我们在继承自定义View的时候也自然的需要继承View.1.首先新建一个类LView继承自View 复制代码 代码如下: public class LView extends View { private Paint paint; public LView(Context context) {  

  • Android自定义View实现多片叶子旋转滑动(五)

    上一篇<Android 自定义View(四) 叶子飘动+旋转效果>实现了单片叶子的滑动及旋转,下面实现多片叶子的滑动旋转功能 实现思路比较简单,就是添加一个叶子Leaf类,储存每片叶子的信息, 然后随机产生叶子的坐标及旋转角度,最后实时获取每片叶子信息,添加到画布中 1.Leaf.java 叶子类 private class Leaf { // 叶子的坐标 float x, y; // 旋转角度 int rotateAngle; // 起始时间(ms) long startTime; } 2.

  • Android自定义View简易折线图控件(二)

    继续练习自定义View,这次带来的是简易折线图,支持坐标点点击监听,效果如下: 画坐标轴.画刻度.画点.连线..x.y轴的数据范围是写死的 1 <= x <= 7 ,1 <= y <= 70 ..写活的话涉及到坐标轴刻度的动态计算.坐标点的坐标修改,想想就头大,这里只练习自定义View. 1.在res/values文件夹下新建attrs.xml文件,编写自定义属性: <?xml version="1.0" encoding="utf-8"

  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享

    如果想在自定义的View上面显示Button 等View组件需要完成如下任务 1.在自定义View的类中覆盖父类的构造(注意是2个参数的) 复制代码 代码如下: public class MyView2 extends View{ public MyView2(Context context,AttributeSet att) {super(context,att); } public void onDraw(Canvas c) { // 这里绘制你要的内容 } } 2.定义布局文件 复制代码

随机推荐