效果图:

代码:

package com.example.lenovo.mydemo.myViewDemo;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View; import com.example.lenovo.mydemo.R; /**
* Created by lenovo on 2018/7/2.
*/ public class MyView_1 extends View {
private final String TAG = "MyView_1";
private float radius;
private int color;
private Paint mPaint; public MyView_1(Context context) {
super(context);
} public MyView_1(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
} public MyView_1(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); } @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Log.e(TAG, "onDraw_radius:"+radius);
/*
用多线段画矩形(也可以直接drawRect画矩形)
*/
//创建画笔\ 关于画笔可以也可以不创建多个画笔使用paint1.reset();来重置画笔
Paint paint1 = new Paint(); //给画笔添加颜色
paint1.setColor(Color.RED);
//设置画笔宽度
paint1.setStrokeWidth(10);
//设置画笔转角(两个线相交的点)风格
paint1.setStrokeJoin(Paint.Join.MITER);
//设置抗锯齿
paint1.setAntiAlias(true);
float[] f = new float[]{
0,0,//第一条线的起始点
getWidth(),0,//第一条线的终点
getWidth(),0,//第二条线的起始点
getWidth(),getHeight(),//第二条线的终点
getWidth(),getHeight(),//同上
0,getHeight(),
0,getHeight(),
0,0};
//在画布上画多线段,添加坐标和画笔
canvas.drawLines(f,paint1); /*
画圆
*/
//创建画笔
Paint paint2 = new Paint();
//设置画笔颜色
paint2.setColor(getResources().getColor(R.color.colorPrimary));
//设置画笔宽度
paint2.setStrokeWidth(10);
//抗齿距
paint2.setAntiAlias(true);
//画空心圆 如果不设置默认是实心圆 另外2个参数是 FILL 和 FILL_AND_STROKE 分别都实心圆
paint2.setStyle(Paint.Style.STROKE);
//画圆形 传入X坐标Y坐标(2个坐标合起来做中心点),然后是半径200加画笔
canvas.drawCircle(getWidth()/2,getHeight()/2,200,paint2);
/*
画文字
*/
Paint paint3 = new Paint();
/*
----------- 字体类型 -------------
* Typeface.DEFAULT //常规字体类型 * Typeface.DEFAULT_BOLD //黑体字体类型 * Typeface.MONOSPACE //等宽字体类型 * Typeface.SANS_SERIF //sans serif字体类型 * Typeface.SERIF //serif字体类型
------------ 字体风格 ---------------
* * Typeface.BOLD //粗体 * Typeface.BOLD_ITALIC //粗斜体 * Typeface.ITALIC //斜体 * Typeface.NORMAL //常规
*/
Typeface typeface = Typeface.create(Typeface.DEFAULT,Typeface.NORMAL);
//导入字体类型和风格
paint3.setTypeface(typeface);
//设置字体大小
paint3.setTextSize(50);
//设置线宽
paint3.setStrokeWidth(5);
//设置颜色
paint3.setColor(Color.RED);
//设置文字居中
paint3.setTextAlign(Paint.Align.CENTER);
canvas.drawText("你好",getWidth()/2,getHeight()/2,paint3); }
}
 

android 开发 View _4_ 我的简单自定义ViewDemo的更多相关文章

  1. android 开发 View _1_ View的子类们 和 视图坐标系图

    目录: android 开发 View _2_ View的属性动画ObjectAnimator ,动画效果一览 android 开发 View _3_ View的属性动画ValueAnimator a ...

  2. Android开发——View滑动的三种实现方式

    0. 前言   Android开发中,我们常常需要View滑动实现一些绚丽的效果来优化用户体验.一般View的滑动可以用三种方式实现. 转载请注明出处:http://blog.csdn.net/seu ...

  3. 黑客破译android开发代码真就那么简单?

    很多程序员辛辛苦苦开发出的android开发代码,很容易就被黑客翻译了. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了 ...

  4. Android开发——View滑动冲突解决方案

    0. 前言   我们在Android开发--事件分发机制详解中深入学习了事件分发机制,为我们解决Android开发中的滑动冲突问题做了初步准备.针对滑动冲突这里给出两种解决方案:外部拦截法和内部拦截法 ...

  5. android 开发 View _14 MotionEvent和事件处理详解,与实践自定义滑动条View

    转载https://blog.csdn.net/huaxun66/article/details/52352469 MotionEvent MotionEvent对象是与用户触摸相关的时间序列,该序列 ...

  6. android 开发 View _8_ 动态图片自定义View

    转载地址:https://blog.csdn.net/mengks1987/article/details/77770922 先来看下效果: 是不是有一种熟悉感,其实这种效果使用序列帧动画也是可以实现 ...

  7. android 开发 View _16 自定义计步器View、自定义柱状图View

    /** *@content:实现计步的环形View *@time:2018-7-30 *@build: */ public class CountStepsAnnularView extends Vi ...

  8. android 开发 View _7_ 动态自定义View

    效果图: 代码: package com.example.lenovo.mydemo.myViewDemo; import android.content.Context; import androi ...

  9. android 开发 View _10_ Path之基本操作

    转载地址:http://www.gcssloop.com/customview/Path_Basic/ 安卓自定义View进阶-Path之基本操作 在上一篇Canvas之图片文字中我们了解了如何使用C ...

随机推荐

  1. HOWTO For iSCSI-SCST && Gentoo HOWTO For iSCSI-SCST

    前言:SCST是一个老版本的linux target实现了,现在基本已经被LIO取代   HOWTO For iSCSI-SCST   这是一个非常快速的HOWTO,旨在提供有关如何设置和配置iSCS ...

  2. python笔记15-集合

    集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不能根据下标来取值,不重复的,也就是说集合中是没有重复的数据 #定义集合:# #方法1:nums = [1,1,1,1,23,4,56]#定义 ...

  3. eval函数解析json数据时加上圆括号的原因

    var temp = eval("(" + data + ")"); //解析json数据 json是以”{}”的方式来开始以及结束的,在JS中,“{}”会被当 ...

  4. 统计php-fpm内存占用

    查看php-fpm的内存占用 1.查看php-fpm的进程个数 ps -ef |grep "php-fpm"|grep "pool"|wc -l 2.查看每个p ...

  5. Python全栈之路----常用模块----random模块

    程序中有很多地方需要用到随机字符,比如登陆网站的随机验证码,通过random模块可以很容易生成随机字符串. >>> import random >>> random ...

  6. Android版本28使用http请求报错not permitted by network security policy

    Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...

  7. 《Linux内核原理与分析》第四周作业

    课本:第3章 MenuOS的构造 内容总结 计算机的"三大法宝" 存储程序计算机 函数调用堆栈 中断 操作系统的"两把宝剑" 中断上下文切换:保存现场和恢复现场 ...

  8. 使用vue自定义简单的消息提示框

    <style scoped> /** 弹窗动画*/ a { text-decoration: none } .drop-enter-active { /* 动画进入过程:0.5s */ t ...

  9. Spring事务原理

    Spring事务的本质是对数据库事务的封装支持,没有数据库对事务的支持,Spring本身无法提供事务管理功能.对于用JDBC操作数据库想要用到事务,必须经过获取连接——>开启事务——>执行 ...

  10. DataTable的详细用法

    在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...