首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏ShaoYL

    自定义View

    自定义View 通过纯代码自定义控件 继承自系统自带的控件,写一个属于自己的控件 在 .h 文件中声明模型对象 @class@property(nonatomic,strong)Shop *shop; self.shopImage.image = [UIImage imageNamed:shop.icon]; self.shopLabel.text = shop.namelabel; } 通过xib自定义控件

    94360发布于 2018-05-11
  • 来自专栏tea9的博客

    自定义View

    http://androidxref.com/ requestWindowFeatrue(Window.FEATURE_NO_TITLE)来设置全屏显示 一定要在setContentView方法之前调用 View specSize = View.MeasureSpec.getSize(measureSpec); // 精准测量模式 if (specMode == View.MeasureSpec.EXACTLY ) { result = Math.min(result,specSize); } } return result; } View的绘制 View onSizeChanged() 组件大小改变时回调 onMeasure() 回调该方法来进行测量 onLayout() 回调该方法来确定显示的位置 onTouchEvent() 监听到触摸事件时回调 有三种方法来实现自定义控件 对现有控件进行拓展 通过组合来实现新的控件 重写View来实现全新的控件

    39410编辑于 2022-07-16
  • 来自专栏刘望舒

    Android View体系(九)自定义View

    七)从源码解析View的measure流程 Android View体系(八)从源码解析View的layout和draw流程 前言 学习了以上的文章后,接下来我们来讲讲自定义View自定义View一直被认为是高手掌握的技能 但是需要注意的是凡事都要有个度,自定义View毕竟不是规范的控件,如果不设计好不考虑性能反而会适得其反,另外适配起来可能也会产生问题,笔者的建议是如果能用系统控件的还是尽量用系统控件。 1.自定义View简介 自定义View按照笔者的划分,分为两大类,一种是自定义View,一种是自定义ViewGroup;其中自定义View又分为继承View和继承系统控件两种。 这篇文章首先先了解下两大类的其中一种:自定义View。 2.继承系统控件的自定义View 这种自定义View在系统控件的基础上进行拓展,一般是添加新的功能或者修改显示的效果,一般情况下我们在onDraw()方法中进行处理。

    1.1K100发布于 2018-02-01
  • 来自专栏Android机动车

    自定义View之客服好评View

    在工作中难免遇到自定义 View 的相关需求,本身这方面比较薄弱,因此做个记录,也是自己学习和成长的积累。自定义View实战. RatingBar 差评理由 TagView 整体评价的 CardView EvaluationRatingBar 介绍 Android 原生就有这个空间 RatingBar,定制型不是很高,所以需要通过自定义来满足特定的产品需求 具体实现 我们都知道 View 的测量工作主要是在 onMeasure 里进行。 宽度计算,可以先测量出每个子 View 的宽度,每次叠加,如果超过父布局限制的宽度则换行。 高度计算,每次换行叠加高度,每一行的高度取子 View 高度的最大值。 getChildAt(i); //跳过View.GONE的子View if (childView.getVisibility() == View.GONE) {

    1.3K50发布于 2018-08-03
  • 来自专栏Android技术分享

    自定义View必备知识-View绘制流程

    View绘制的流程框架 如图所示 ? View的绘制是从上往下一层层迭代下来的。 从View的测量、布局和绘制原理来看,要实现自定义View,根据自定义View的种类不同,可能分别要自定义实现不同的方法。 onDraw()方法:无论单一View,或者ViewGroup都需要实现该方法,因其是个空方法 自定义View优化策略 为了加速你的view,对于频繁调用的方法,需要尽量减少不必要的代码。 另外需要尽量保持View的层级是扁平化的,这样对提高效率很有帮助。 如果你有一个复杂的UI,你应该考虑写一个自定义的ViewGroup来执行他的layout操作。 与内置的view不同,自定义view可以使得程序仅仅测量这一部分,这避免了遍历整个view的层级结构来计算大小。

    2K30发布于 2019-05-29
  • 来自专栏Android常用基础

    自定义View(八)-View的工作原理- View的measure

    精确模式,父容器已经检测View所需要的精确大小,View的最终大小就SpecSize所指定的值。 默认大小的宽高和父View传递的测量规格重新计算View的测量宽高。 在通常情况下我们没有设置android:minWidth属性,那么getDefaultSize()的返回值就为specSize(父容器提供的)那我们通过getDefaultSize()方法知道了,在自定义 同时对于普通View针对不同的父容器和View本身不同的LayoutParames,View就可以有多重MeasureSpec具体不同参照下表: ? View的测量(1).png ---- 结语 View的测量基本上就是这样了。通过本章的学习,我们应该掌握测量的流程和里面重要的方法,这样我们在自定义View的时候才会更的得心应手。

    99510发布于 2018-09-11
  • 来自专栏指点的专栏

    Android自定义View

    前几天在郭霖大神的博客上看了自定义View的知识,感觉受益良多,大神毕竟大神。 在此总结一下关于Android 自定义View的用法: 首先,自定义View可以由基本控件或者组合控件组合而成,下面以一个例子来看。 这就是自定义View的第一种,组合控件的简单用法,接下来是通过继承已有控件或者布局并且加上新的逻辑来实现自己需要的功能: 新建一个布局文件through_view.xml: <? ); 最后呢,就是自绘View来实现自定义View: 新建一个类PaintView.java: import android.content.Context; import android.graphics.Canvas 总结一下Android自定义View的三种方法: 1、通过组合已有控件作为新的控件来实现自定义View; 2、继承已有的控件并为其增加新的功能来实现自定义View; 3、通过自绘View并加入事件处理来实现自定义

    84410发布于 2019-01-18
  • 来自专栏Android机器圈

    自定义View实战

    PS:上一篇从0开始学自定义View有博友给我留言说要看实战,今天我特意写了几个例子,供大家参考,所画的图案加上动画看着确实让人舒服,喜欢的博友可以直接拿到自己的项目中去使用,由于我这个写的是demo 线条 : 渐变颜色,线帽格式,长度,宽度设置,父布局宽高格式设置格式设置,子view宽高格式设置 球 :颜色,起始位置和终止位置要在线上,尺寸 在做之前我们先一个一个知识点解析,首先是线的渐变颜色,单独拿出 当图片小于绘制尺寸时要进行边界拉伸来填充   REPEAT:当图片小于绘制尺寸时重复平铺   MIRROR:当图片小于绘制尺寸时镜像平铺 好了,下面我们就先画线和红点,如果有看不懂的博友,可以先看上一篇从0开始学自定义 View

    72520发布于 2020-05-09
  • 来自专栏flutter开发者

    自定义View概述

    View ---- 在往期文章中我们花了很多篇文章来学习Flutter Widget 的用法,在Flutter中Widget有很多,我不肯能每个都给大家介绍到,但是我基本上把常用的都给大家介绍到了(想太多了 官方肯定也会想到这一点啊,在Flutter中也是支持你自定义viewget的 在Flutter中与绘制相关的是在Painting层次,具体见下图: ? Flutter架构图 和Flutter自带的Wdiget一样,自定义的Widget也会经过Skia被编译成原生代码,所以性能上也是不受影响的。 Flutter坐标系 因为在View自定义过程中我们需要排放多个View,所哟弄清楚这一点,在以后自定义Wdiget中会轻松很多。 今天,就先说这么多,从下篇文章起我们就回来学习Flutter自定义Widget的相关内容。

    96531发布于 2018-10-16
  • 来自专栏yanlongli_艳龙

    Android 自定义View

    这篇文章是一个自定义View的学习总结文章,会介绍自定义view的整体流程和部分相关的api使用,并不会对所有使用到的api进行介绍,所以阅读的话需要有一些Android的开发基础。 可是在很多时候设计师都会拿着ios的手机,来让你实现ios上一样的效果 ,这是以前比较头疼的一个问题,深入了解自定义View后,感觉以后应该不会再有这样的困扰了。 () 方法就可以满足我们的需求了,当然一些特殊的情况下,也可以根据具体的需求来决定复写哪个函数 自定义View 如何自定义一个View 自定义View 可以 extends View, 或者扩展系统已有的 View,例如 extends TextView 等 重写 onDraw 方法(或者dispatchDraw/onDrawForeground) /** * 一个自定义View */ public () 是自定义绘制最基本的操作 -Canvas.drawColor(@ColorInt int color) 设置绘制的背景色 drawColor(Color.BLACK); // 纯黑 图片来源

    64810编辑于 2022-05-13
  • 来自专栏Android开发小工

    自定义View基础(二)View的滑动

    Android 自定义View View的滑动 ---- 在移动设备上,滑动基本是基础特性。不管是用的最多的下拉刷新还是ViewPager,他们的基础都是滑动。 View的滑动实现方法也是绚丽的自定义View的基础知识。 需要注意的是这两个方法只能改变View内容的位置而不能改变View在布局中的位置。 使用属性动画后 需要提一句的是,属性动画是3.0以后的特性,3.0以前的View动画只是对View的影像做操作,并不能真正改变View的位置参数。 动画API和scrollTo方法的实现方式,不过下面这种方法只是View内容的移动,如果要View的移动可能需要改变View的布局参数,这就很麻烦了。

    71720发布于 2018-08-23
  • 来自专栏代码GG之家

    自定义View(一)

    自定义View 需求场景:当系统默认的view不能满足您的优(qi)美(pa)界面 要求时候,自定义view则进入您的视野,来满足您的客制化。 那么我们这节开车,来完成自定义view所需要的步骤。 然后进入onMeasure,这个完成我们view的大小测量,测量完了,我们要对我们的view里面的元素进行onLayout布局 (主要这个是在线性或者相对布局里面,去计算子view的实际位置时候使用), 为了使得我们自定义view能够少些思考(少走弯路),我这边专门做了一个baseView,如果你需要自定义view,直接继承它,它会强制让你实现一些接口,具体的接口有: 每个函数都有解释,一目了然。 2:在自己的项目build.gradle 引入开源库 3:自定义view 继承BaseView ,完成它的所有复写方法。 4:自定义一个属性(视情况而定) values下面新加一个attrs.xml文件,里面新增一个属性: 5:布局文件 加入自定义属性 6:MyView去完成初始化 拿到styleable值,在initAttrs

    68960发布于 2018-02-02
  • 来自专栏flutter开发者

    自定义View【2】

    在前面的文章中我们学习了部分绘制的相关方法,在本篇文章中我们会继续再介绍一些常用的绘制方法。

    55320发布于 2018-11-20
  • 来自专栏JetPack

    Android自定义View-入门(明白自定义View自定义ViewGroup)

    自定义View 为什么要自定义View? 主要是Andorid系统内置的View 无法实现我们的 需求,我们需要针对我们的业务需求定制我们想要的 View.自定义View 我们大部分时候只需重写两个函数: onMeasure(),onDraw( View里面吧我们自定义的属性值取出来,在构造函数中,有个AttributeSet的属性,我们需要用它来帮我们把布局里面的属性取出来。 ViewGroup 自定义View的过程简单,其实也就那几步,可自定义ViewGroup 可就比较麻烦了,因为不仅要管好自己,还要兼顾子View。 一般自定义viewgroup我们从这几方面去思考: 首先,我们需要知道各个子 view 的大小,只有知道子 view 的大小,我们才知道当前的View Group该设置为多大去容纳它们。

    1.5K30编辑于 2022-02-09
  • 来自专栏flutter开发者

    自定义View【1】

    前言 ---- 在上一篇文章中,我们学习了自定义View的基本流程和一些相关知识,想必大家对自定义View多少都有了一定的了解。 今天我们就到代码的层次来看下如何实现和使用自定义View自定义流程 ---- 在前面的文章中我们已经学习了Flutter中自定义View的简单步骤,今天我们就按照这个步骤来实现下自定义View。 paint方法就是Flutter中负责View绘制的地方,使用传递来的canvas和size即可完成对目标View的绘制。 shouldRepaint是控制自定义View是否需要重绘的,返回fals代表这个View在构建完成后不需要重绘。 但是,现在我们并不能去运行这个程序,我们自定义view从根本也不是一个Widget,所以也没法直接在Widget tree中去构建,所以这个时候就要借助与CustomPaint来给我们自定义的CustomPainter

    1.2K10发布于 2018-10-25
  • 来自专栏伟大程序猿的诞生

    Android自定义View【实战教程】2⃣️----自定义view那些事

    很多人对自定义view都很胆怯,其实自己去玩一玩会发现很简单。 知识点 个人把自定义View分为以下四个步骤 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 3、重写onMesure 4、重写onDraw ---- 简单的自定义View Demo 1、自定义View的属性 <? attr name="image" /> <attr name="imageScaleType" /> </declare-styleable> </resources> 2、在View 的构造方法中获得我们自定义的属性 public class CustomImageView extends View { private static final String TAG = CustomImageView.class.getSimpleName

    60620发布于 2019-01-21
  • 来自专栏Android常用基础

    自定义View(二)-动画- 代码生成View动画

    前言 上篇我们介绍了视图动画,说的确切点应该是视图动画中的补间动画(Tween Animation),关于逐帧动画(Frame Animation)用法更简单,这里先不做介绍后期再自定义View的使用会用到 ---- 实战 View动画讲到这基本上也就差不多了,那么我们用个小例子在实际中运用一下。 下面这个例子就是百篮应用中Activi ty进入与退出动画。我们就可以用我们学到的View动画来去实现。 Android自定义控件三部曲文章

    83910发布于 2018-09-11
  • 来自专栏Android常用基础

    自定义View(一)-动画- XML生成View动画

    所以当初的2个承诺,一个是完善功能另一个写一个学习自定义View系列文章。个人觉得第二个比较重要。因为在理解后如何去完善,是仁者见仁智者见智的事情。 ---- 结语 本文的很多内容都是借鉴于Android自定义控件三部曲文章,这个系列文章就像一本书一样,让我在学习自定义View的时候给了我很大的帮助。所以在我写的时候会借鉴很多他的内容。 学习自定义View是一个漫长的路。我也是边学边总结。 我觉得要学好自定义View应该这样: 动画-->画笔-->画布-->View的绘制流程-->事件分发-->自定义View-->自定义布局-->drawable...这只是一个学习的过程,还需要大量的学习好的自定义 他里面有许多关于自定义View的文章 带你一步步深入了解View Android 自定义控件之起步

    1.1K10发布于 2018-09-11
  • 来自专栏Android知识分享

    自定义View基础 - 最易懂的自定义View原理系列(1)

    前言 自定义View原理是Android开发者必须了解的基础; 在了解自定义View之前,你需要有一定的知识储备; 本文将全面解析关于自定义View中的所有知识基础。 ---- 目录 ? View的构造函数:共有4个,具体如下: 自定义View必须重写至少一个构造函数: // 如果View是在Java代码里面new的,则调用第一个构造函数 public CarsonView(Context context) { super(context); } // 如果View是在.xml里声明的,则调用第二个构造函数 // 自定义属性是从AttributeSet参数传进来的 Android的角度(angle)与弧度(radian) 自定义View实际上是将一些简单的形状通过计算,从而组合到一起形成的效果。 总结 关于自定义View基础已经讲解完毕

    69810发布于 2019-02-22
  • 来自专栏Android Note

    自定义 View 实战 05 - 仿 58 加载View

    view58.gif 动画分析: 圆形 正方形 三角形 分别使用drawCircle(),drawRect(),drawPath(),画出对应的图形,然后使用属性动画让它移动和旋转。 class View58 @JvmOverloads constructor(context: Context,attributeSet: AttributeSet,defStyle:Int = 0): View(context,attributeSet,defStyle) { private var mPaint = Paint() private var mZColor = Color.BLUE

    66820发布于 2020-06-28
领券