原
浅谈安卓自定义view(一):制作一个最最最简单的自定义view
2017年11月09日 16:47:13 wsyizmao 阅读数:4739 标签: 自定义view 更多
个人分类: 我的安卓
对于安卓程序员来说,自定义view简直不要太重要,毕竟有很多功能,譬如圆形头像这些,用单纯的原生非常难以实现,而用自定义view,简直分分钟。
在这里,我尝试用最简单方式跟初学者说一下如何自定义一个自己的view~
首先,最简单最简单的自定义view,有多简单?简单到没有逻辑,没有任何自带属性,只是简单展示,
譬如,我制作一个圆形图片。。。
一共只需要两步,
第一步,创建你的自定义类,让它继承View类,并重写构造方法。
第二步,重写ondraw()方法。
比如,我创建了这个自定义类名字叫做circleImageView,如下图所示:
注意,这里有两个默认的构造器方法,circleImageView(Context context)和circleImageView(Context context,AttributeSet arrts)
其中circleImageView(Context context)这个方法是你动态new的时候调用的,而circleImageView(Context context,AttributeSet arrts)这个方法是你在xml文件中调用才会调用这个方法。如下图,直接将标签定义为类名便可以了:
然后第二步,重写ondraw()方法!
在这里简单说一下,ondraw(),顾名思义就是画画方法,在自定义组件时候,其实内部可以简单分为三个步骤,也就是三大方法,onMeasure,onLayout,ondraw,这些方法在自定义组件中依次运行,先onMeasure获得组件大小,再onLayout知道组件布局位置,最后ondraw将组件渲染画出来,但是其实在自定义组件中onMeasure和onLayout不是必须重写的,所以在这里我先不说,后面再讲,就说这个ondraw方法,这个是必须实现的方法。
在上面的构造器方法中,我已经在组件初始化的时候便将要显示的图片初始化伟bitmap了
嗯,就是上面那个方法
接下来我们要做的就是将这个bitmap截成一个圆形,在这里我写了一个圆形方法,如下图:
好啦,画圆方法写好啦,最后就是在ondraw里面调用画画方法就好了,如下图
这样一个自定义组件就写好啦,完整代码如下图
package com.example.administrator.testmyidea.myTextView;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.View;
import com.example.administrator.testmyidea.R;
public class circleImageView extends View{
private Paint mPaint;
private Bitmap imageBitmap;
private float circleRadio;
public circleImageView(Context context) {
super(context);
mPaint=new Paint();
}
public circleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint=new Paint();
imageBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.touxiang);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(getCircle(imageBitmap),0,0,mPaint);
}
//将bitmap转换成圆形bitmap
public Bitmap getCircle(Bitmap bitmap){
//circleRadio圆形图片的半径
float circleRadio=bitmap.getWidth()/2;
//创建一张新的bitmap,跟传入图片一样宽的正方形bitmap,
Bitmap b=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getWidth(), Bitmap.Config.ARGB_8888);
//初始化画布,并将刚才创建的bitmap给这画布,让画布画在这bitmap上面
Canvas canvas=new Canvas(b);
//初始化画笔
Paint p=new Paint();
//在画布中画一个等宽的圆
canvas.drawCircle(circleRadio,circleRadio,circleRadio,p);
//设置画笔属性,让画笔只在哪圆圈中画画,关于画笔属性,可以百度一下,很多,但是非常有用
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap,0,0,p);
return b;
}
}
在xml里面代码是这样的
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:luo="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.testmyidea.MainActivity">
<com.example.administrator.testmyidea.myTextView.circleImageView
android:layout_centerInParent="true"
android:layout_width="150dp"
android:layout_height="150dp"/>
</RelativeLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
最后效果:
诺~自定义的圆形imageview出来啦
不过这里的是写死图片的,下一节我们说下怎么弄为可在代码动态设置图片,也可以在xml里面加入图片地址的
添加代码片
- HTML/XML
- objective-c
- Ruby
- PHP
- C
- C++
- JavaScript
- Python
- Java
- CSS
- SQL
- 其它
还能输入1000个字符
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51454685 本文出自:【openXu的博客】 [TOC] 在上一篇博...
自定义View(三)---自定义View整个流程的梳理与总结
转载请注明出处:From李诗雨—http://blog.csdn.net/cjm2484836553/article/details/71024436 不诗意的女程序猿不是好厨师~ 在自定义Vi...
博客介绍https://blog.csdn.net/jinmie0193/article/details/79824497
鸿洋大神博文Android 自定义View (一)中自定义属性所遇到的坑
本系列教程博客,我都会将自己实现的思路写下来,带大家一步步从零开始实现我们想要的效果。因为最近在网上看了很多前辈们实现的 水波浪进度框,一时手痒,所以任性地决定这系列的第二篇博客的主角就是它了...
相关热词
浅谈抢红包 浅谈http 后缀数组浅谈 浅谈splay 场景浅谈
纯属个人笔记,学习慕课网视频笔记!!!!! 1:自定义属性的声明和获取 分析要需要的属性 在res/values/attrs.xml中进行定义声明,在使用自定义控件xml中使用 在自定义...
简介 xxx 方法 drawRect(float left, float top, float right, float bottom, Paint paint) Draw the s...
一.自定义View分类 View下面有 ImageView ImageButton QuickContactBadge AppCompatImageView ...
前言 自定义View是Android开发者必须了解的基础 今天,我将手把手教你写一个自定义View,并理清自定义View所有应该的注意点 阅读本文前,请先阅读我写的一系列自定义View文章 ...
转眼已是十一月下旬了,天气慢慢转冷,不知道北方是不是已经开始下雪了呢?本期教程我们就顺应季节主题,一起来实现雪花飘落的效果吧...
为什么要自定义Viewandroid提供了很多控件供我们使用 但有些功能是系统所提供的实现不 了的 这时候我们就需要自定义一个View来实现我们所需要的效果. 在Android中所有的控件都直...
Android自定义View(一、初体验自定义TextView)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51376048 本文出自:【openXu的博客】 继承View重写onDraw...
View是一个Android视图的基础类,这个类是用户接口的基础构件。 View 表示屏幕上的一块矩形区域,负责绘制这个区域和事件处理。...
Android开发-自定义View-AndroidStudio(八)自定义View初体验
自定义View Layout过程 - 最易懂的自定义View原理系列(3)
前言 自定义View是Android开发者必须了解的基础 网上有大量关于自定义View原理的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化 等 今天,我将全面总结自定义V...
自定义View基础 - 最易懂的自定义View原理系列(1)
自定义View Measure过程 - 最易懂的自定义View原理系列(2)
参考别人的文章,简明易懂,留个笔记 参考原文链接 在毕设项目中多处用到自定义控件,一直打算总结一下自定义控件的实现方式,今天就来总结一下吧。在此之前学习了郭霖大神博客上面关于自定义View的几...
<em>Android</em>中<em>自定义View</em>
*版权证明: 只允许上传png/jpeg/jpg/gif格式的图片,且小于3M *详细原因: 取 消 提 交 <em>Android</em>中<em>自定义View</em> 5积...
Android自定义view之自己真正意义上的自定义view
之前的自定义view文章也写了几篇了,但是也一直是局限于搞懂系统API如何使用等,还是没有真正的实践过,今天这篇文章算是自己真正意义上的第一次自定义view,就是做了一个常见的尺子效果的半...
android自定义view-打造圆形ImageView(一)
做了几年开发以前都是去看书, 看大神的博客, 看别人的文章, 确实收获了不少, 遇到不会的就查, 看到别人写好的第三方控件就拿过来用 , 使用别人制造的轮子感觉灰常好, 还节省时间, ...
没有更多推荐了,返回首页
个人资料
粉丝
5
喜欢
0
评论
3
等级:
访问:
7095
积分:
254
排名:
32万+
勋章:
持之以恒
授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
最新文章
个人分类
归档
热门文章
- 浅谈安卓自定义view(一):制作一个最最最简单的自定义view
阅读量:4724
- android 小米时钟的实现
阅读量:517
- html 布局
阅读量:439
- 自定义view2——创建你自己的组件自定义属性
阅读量:200
- 设置图片inSampleSize但是内存没变?或许你应该看看这个
阅读量:176
最新评论
- android 小米时钟的实现
qq_41613677:[reply]qq_41613677[/reply] 我的邮箱是685883550@qq.com
- android 小米时钟的实现
qq_41613677:您好 我用这个为什么超出了屏幕,画布太大,只显示一部分,需要加什么属性吗?< com and...
- 设置图片inSampleSize但...
wsyizmao:欢迎大家评论啊
联系我们
请扫描二维码联系客服
400-660-0108
QQ客服 客服论坛
©2018 CSDN版权所有 京ICP证09002463号
CSDN APP