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

    Jetpack-Compose 学习笔记(三)—— Compose自定义View

    Compose 自定义一个 “ViewCompose 中的自定义 Layout 跟 View 体系是很不同的。我们需要自定义的 Layout 居然就是自定义一个 Modifier 属性! 自定义一个 “ViewGroup” 说完了 Compose 自定义View” 的方法,当然也就少不了自定义“ViewGroup” 了。 总结一下,在 Compose自定义 Layout 的基本流程其实跟 View 体系中自定义 View 的一样,其中最大的不同就是在测量的步骤,Compose 为提高效率不允许多次进行测量。 而且 Compose自定义 Layout 的两种情况也可以对应到 View 体系中的两个情况,但可以看出,Compose 都是在 Layout 组件中进行的改写与编程,可以让开发者更加聚焦在具体的代码逻辑上 那么,Compose自定义View”,你学会了么?

    2K21编辑于 2022-08-19
  • 来自专栏HenCoder

    【世纪纠结】Jetpack Compose自定义 View,学哪个?

    正文 「学 Compose 还是学自定义 View?」这个问题从去年初我发第一个 Compose 主题的视频到现在,一直有人问我。 今天来跟大家聊聊「学 Compose 还是学自定义 View」的问题。 首先我们确定一下前提:这是个个人职业发展角度的讨论,也就是所谓的利益导向。 关于 Compose自定义 View 哪个更好或者我更喜欢哪个,在这个视频里不做讨论。 从原理看,Compose 似乎可以取代 View 大家更关心的是【现在】学哪个,如果让我简单直接地回答:自定义 View。 我的观点是:对于当下这个时代,你如果有时间,双修——Compose自定义 View 两个都学——是对我们的职业发展最负责的选择。而如果你的时间不够,只能先学一个,那么去学自定义 View

    1.1K30编辑于 2022-11-23
  • 来自专栏codelang

    Compose 中嵌套原生 View 原理

    Compose 天然就支持被原生 View 嵌套,但也支持嵌套原生 ViewCompose 是通过自己的一套重组算法来构建界面,测量和布局已经脱离了原生 View 体系。 「既然脱离了这套体系,那 Compose 是如何完美支持嵌套原生 View 的呢?脱离了原生 View 布局体系的 Compose,是如何对原生 View 进行测量和布局的呢?」 小结:在 AndroidView 这个函数中我们发现,原生 View 是通过外部包裹一层 Compose 组件参与到 Compose 布局中的 2、分析 ViewFactoryHolder 我们来看下, 是如何添加进 Compose 中的,我们可以画个图来简单总结下: 橙色:在 Compose 中嵌套 AndroidView 才会有,如果没有使用,则没有橙色层级 黄色: 嵌套的原生 View,此处演示的为示例的 中的,他依然使用的是原生布局体系 嵌套原生 View 的测量与布局,是通过创建个代理 LayoutNode ,然后添加到 Compose 中参与组合,并将每次重组返回的测量信息设置到原生 View

    1.2K20编辑于 2022-08-30
  • 来自专栏ShaoYL

    自定义View

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

    94160发布于 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来实现全新的控件

    39310编辑于 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的measure

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

    99010发布于 2018-09-11
  • 来自专栏Android开发小工

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

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

    71520发布于 2018-08-23
  • 来自专栏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 的相关需求,本身这方面比较薄弱,因此做个记录,也是自己学习和成长的积累。自定义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
  • 来自专栏代码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
  • 来自专栏指点的专栏

    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并加入事件处理来实现自定义

    84310发布于 2019-01-18
  • 来自专栏flutter开发者

    自定义View概述

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

    96331发布于 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); // 纯黑 图片来源

    64510编辑于 2022-05-13
  • 来自专栏Android机器圈

    自定义View实战

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

    72420发布于 2020-05-09
  • 来自专栏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

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

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

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

    83810发布于 2018-09-11
领券