c++的一个主要目标就是促进代码重用,缩短代码开发时间。其中继承就是实现该目标的机制之一。 1. 私有继承 私有继承提供的特性与包含相同:获得实现,并不获得接口。
这次我们来分析下viewgroup的。 可能有人会想,怎么又是源码分析,肯定又是一大通。其实没你想的那么复杂。仔细分析一波就行了。...而这一整套的机制就是在ViewGroup中体现出来的。我们先来看一张图: ?...接下来才是我们熟悉的触摸事件流程:首先是最顶端的ViewGroup(这边便是DecorView)的dispatchTouchEvent接收到事件。...总结 1.ViewGroup包涵多个子view的时候,我们是从后遍历,判断当前view是否可以点击,然后分发给需要处理的子view。...3.我们可以发现ViewGroup没有onTouchEvent事件,说明他的处理逻辑和View是一样的。 4.子view如果消耗了事件,那么ViewGroup就不会在接受到事件了。
Android 5.0之后ViewGroup的dispatchEvent源码更加复杂,由于方法含义不变,遂采用5.0之前的源码进行分析 dispatchTouchEvent 分析 mFirstTouchTarget...= 0; //这个返回为true根据是否调用parent.requestDisllowInterceptTouchEvent方法并设置false,就交给viewgroup的 onInterceptTouchEvent...处理,子view没有处理,就会交给子view上层viewgroup处理。...false事件才会回溯,交给viewgroup处理事件 if (mFirstTouchTarget == null) { // No touch targets...transformedEvent.recycle(); return handled; } ViewGroup dispatchTouchEvent 分析总结 Android事件分发先从ViewGroup
mContainer.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE); 并且在后续的自己开发APP中,甚至是拿了软著权准备上架的那几款...AdapterView.OnItemClickListener, View.OnClickListener { private ListView mPhotosList; private ViewGroup...android.R.id.list); mImageView = (ImageView) findViewById(R.id.picture); mContainer = (ViewGroup...mImageView.setOnClickListener(this); //由于我们缓存的是大视图,我们希望在每个动画之间保持它们的缓存 mContainer.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE
---- 首先我们自定义一个ViewGroup和一个View,然后重写相关事件进行打印: 场景一:正常返回super,TouchView设置click和onTouchListener事件(onTouch...可以看到触发的DOWN MOVE UP事件顺序都为: ViewGroup.dispatchTouchEvent -> ViewGroup.onInterceptTouchEvent -> View.dispatchTouchEvent...这时候发现除了,执行的顺序变为了: ViewGroup.dispatchTouchEvent -> ViewGroup.onInterceptTouchEvent -> View.dispatchTouchEvent...-> View.onTouch -> View.onTouchEven->ViewGroup.onTouchEven 并且只有DOWN事件,其他事件就没有了。...这个时候就只有DOWN事件,并且顺序为: ViewGroup.dispatchTouchEvent -> ViewGroup.onInterceptTouchEvent -> ViewGroup.onTouchEvent
hadoop重用机制 Hadoop1.0JVM重用及调优 什么是HadoopJVM重用 ? Hadoop里每个task任务的执行都会启动JVM进程来运行。...但是jvm的重用也会造成在同一个jvm中的碎片增加,导致jvm的性能变差。...但是这一负面影响不是很大,总的来说,jvm重用还是值得使用的,尽管相对于那些长时间且task数少的job来说,jvm重用几乎没有什么性能提升。...在这种情况下,可以看出每一个JVM仅会执行一Task, JVM并未被重用。 用户可以通过启用uber组件来允许JVM重用——即在同一个container里面依次执行多个task。...这样Application Master便不用再为每一个task向Resource Manager去申请一个单独的container,最终达到了 JVM重用(资源重用)的目的。
自定义ViewGroup可不像自定义View那么简单 今日聚焦: 1.自定义ViewGroup中花样布局子View 2.移动View用layout、translation、TranslationAnimation...3.ViewGroup里怎么给孩子加动画 4.惯性移动?...也许你可以了解一下 效果 1 效果 2 一、前置知识: 1.生命函数 这是我曾经测试画出的一张图,描述了ViewGroup+两个孩子的生命函数调用情况 在这补充一点,ViewGroup...这里使用适配器模式,跟ListView一个套路,其实是非常简单,看箭头所指 这里暂时不对ViewGroup进行测量,先填满。...对子View用自带的测量方法measureChildren public class FlowerLayout extends ViewGroup { private int mRadius
); setBaseAttributes(a,R.styleable.ViewGroup_Layout_layout_width, R.styleable.ViewGroup_Layout_layout_height...,在上面我们分析了ViewGroup#generateLayoutParams它是作用在xml布局解析阶段为子View设置LayoutParams,那么ViewGroup#generateDefaultLayoutParams...,只支持width和height的 再分析下ViewGroup#generateLayoutParams(LayoutParams p),分析ViewGroup#addViewInner源码 private...= null; } ViewGroup默认的校验规则仅仅是不为空,相关宽松,LinearLayout等一般都会重写,有兴趣可以看源码 再分析下ViewGroup默认的generateLayoutParams...(ViewGroup.LayoutParams p)实现 protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
涉及到kotlin语法的相关知识我就不多说了,今天就项目需求,自定义一个viewgroup作标签视图来使用进项目中去。...1、开写继承constructor 一般在java语言中,constructor直接在继承viewgroup后会报错,然后根据自定义快捷键,默认为alt+enter【博主是用的eclipse 的keymap...然而到了kotlin它的constructor很特别,可以根据语法如下书写: class Test constructor (private val context:Context) : ViewGroup...View.MeasureSpec.EXACTLY) sizeHeight else resultHeight) } } 通过以上方法我们控制了子view的显示,同时让我们现在的viewgroup
1.LayoutParams LayoutParams 是ViewGroup的内部静态类 ,ViewGroup的子类(如RelativeLayout,LinearLayout,FrameLayout...)都有其对应的 ViewGroup.LayoutParams的子类,如RelativeLayoutParams LayoutParams 的作用:指定视图View 的高度(height) 和...view的LayoutParams确定子view的大小 // 当父view的模式为EXACITY时,父view强加给子view确切的值 //一般是父view设置为match_parent或者固定值的ViewGroup
今天跟大家分享另外一种方式,通过继承ViewGroup来实现,我们都知道,ViewGroup可以填充很多个View,因此,我觉得可以类似把GridView的每一个Item填充到我们自定义的ViewGroup...中,然后监听长按时间,实现拖动的效果,同时加上动画效果,个人感觉比网上其他实现方式更加简洁和美观,唯一的缺点就是:没有setAdapter的函数,添加的item,需要我们手动add到ViewGroup中...** * 另外一种方式实现动画可拖动item的GridView * * @author way * */ public class DragGridView extends ViewGroup
这个函数是在ViewGroup里定义的,主要用于控制child View获取焦点的能力,比如是否阻止child View获取焦点。...他有三个常量可供设置 FOCUS_BEFORE_DESCENDANTS ViewGroup本身先对焦点进行处理,如果没有处理则分发给child View进行处理 FOCUS_AFTER_DESCENDANTS...先分发给Child View进行处理,如果所有的Child View都没有处理,则自己再处理 FOCUS_BLOCK_DESCENDANTS ViewGroup本身进行处理,不管是否处理成功,都不会分发给...direction, Rect previouslyFocusedRect) { if (DBG) { System.out.println(this + " ViewGroup.requestFocus
今天给大家代码ViewGroup事件分发的源码解析~~凡是自定义ViewGroup实现各种滑动效果的,不可避免的会出现很多事件的冲突,对ViewGroup事件分发机制的了解,也有益于大家了解冲突产生的原因...,然后才会到View自身~ 下面我们按照日志的输出,进入源码~ 2、源码分析 ViewGroup - dispatchTouchEvent 1、ViewGroup - dispatchTouchEvent...的ACTION_DOWN分析结束,总结一下: ViewGroup实现捕获到DOWN事件,如果代码中不做TOUCH事件拦截,则开始查找当前x,y是否在某个子View的区域内,如果在,则把事件分发下去。...捕获到事件,然后判断是否拦截,如果没有拦截,则直接调用mMotionTarget.dispatchTouchEvent(ev) 3、ACTION_UP中,ViewGroup捕获到事件,然后判断是否拦截,...从源码也可以解释: ViewGroup MOVE和UP拦截的源码是这样的: if (!
这是官方的解释:在自定义ViewGroup时,ViewDragHelper可以用来拖拽和设置子View的位置(在ViewGroup范围内)。另外,还提供了一系列的方法和状态跟踪。...clampViewPositionVertical:计算child垂直方向的位置,top表示y轴坐标(相对于ViewGroup),默认返回0(如果不复写该方法)。...(二) 布局文件 布局很简单,自定义的ViewGroup包含两个TextView。...原因在于: 由于子View是可被点击的,那么会触发ViewGroup的onInterceptTouchEvent方法。...因为ViewGroup拦截了它的事件了啊。。。
ViewGroup的测量 之前分析中说了,ViewGroup会去管理其子View,其中一个管理项目就是负责子View的显示大小。...当ViewGroup的大小为wrap_content时,ViewGroup就需要对子View进行遍历,以便获得所有子View的大小,从而来决定自己的大小。...ViewGroup在测量时通过遍历所有子View,从而调用子View的Measure方法来获得每一个子View的测量结果,前面所说的对View的测量,就是在这里进行的。 ...在自定义ViewGroup时,通常会去重写onLayout()方法来控制其子View显示位置的逻辑。...ViewGroup的绘制 ViewGroup通常情况下不需要绘制,因为它本身就没有需要绘制的东西,如果不是指定了ViewGroup的背景颜色,那么ViewGroup的onDraw()方法都不会被调用。
除了在源代码层面实现共享(“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用)之外,我们还可以跨平台共享同一个程序集,这种独立于具体平台的“中性”程序集通过创建一种名为“可移植类库(PCL
1. 制作模板 选择需要制作为模板的页面,鼠标右击,弹出的菜单中选择“加入到模板收藏”,然后选择相应 的模板库,如果没有模板库会提示新建一个。 加入成功之...
ViewGroup和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,View类有接受和处理消息的功能,android系统所产生的消息会在这些ViewGroup和 View之间传递...ViewGroup ViewGroup可以包含一个或多个View。ViewGroup本身就是一种特殊的View,它提供了一个布局,可以使用这个布局去组织一系列的View视图。...ViewGroup继承于View,它可以包含其他的View,就像一个View的容器,我们可以调用其成员函数addView()将View当作孩子放到ViewGroup中。...我们经常使用的LinearLayout、relativeLayout等都是ViewGroup的子类,ViewGroup类中有一个内部类ViewGroup.LayoutParams,我们经常使用LayoutParams...每个“ViewGroup”都继承自基类android.view.ViewGroup。
8329ccc8bb7dc74799981a4131ffb74.png 异常说的是两个是不同类型的LayoutParams ,但明明都是ViewGroup的LayoutParams呀,而且log上没有标明位置
TLS有几个特征可以用来消除额外的来回,比如重用一个会话session,两个标准会话重用机制是 session IDs (RFC 5246) 和 session tickets (RFC 5077),使用其中一个技术...,一个客户端可以重用之前创建的会话,这个会话是之前和服务器进行握手成功的,这样可以减少一次来回过程。 ...Session ID重用 重用一个加密的会话是很容易,前提是客户端和服务器端都保存了会话key,通过每个连接给出的唯一标识,服务器知道一个进来的连接是否已经在之前创建过,如果服务器在会话中也已经有会话...key,它就能重用。 ...ticket到客户端,存储到客户端本地,当重用会话时,客户端发送会话ticket到服务器,服务器解密然后重用会话。