自定义View
Android_Study_OK
一路追赶!
展开
-
多点触摸处理
接着上文,我们做了一个简陋的下拉刷新控件,目前用到的知识点有view的滑动view的弹性滑动事件分发机制事件分发机制的两个小问题(事件的二次分发)目前这个控件除了简陋一点,没做抽象封装,在单手操作下,表现还是不错的,但是多手操作试一下,页面会产生位移突变。这就引出了本节的多点触摸知识点首先推荐这个大神的博客安卓自定义View进阶-MotionEvent详解安卓自定义View进阶...原创 2019-12-06 17:21:52 · 463 阅读 · 0 评论 -
触摸事件分发机制(有用的小技巧:事件二次分发)
存在的问题在上文的下拉刷新控件中,有两个问题在下拉到ScrollView顶部时候,继续往下拉时,并不会直接把头布局拉下来,而是需要把手松开后,再次下拉才会拉下头布局,为什么?上文说过,onInterceptTouchEvent方法虽然不是每次都被调用,但是如果子view在处理事件的时候,onInterceptTouchEvent是一直会调用的,因为他要等待子View不想消费事件的时机出...原创 2019-12-05 19:39:44 · 485 阅读 · 0 评论 -
触摸事件分发机制
触摸事件分发这是我之前写的一篇事件分发的博客,这篇文章是在看了《Android开发艺术探索》后写的,书中已经给出了【外部拦截法】和【内部拦截法】的模板代码,我们可以直接拿来使用即可,书中也给出了看源码后的重要结论,博客里我写了个demo,以打印log的方式验证了一遍,帮助理解了一遍事件分发的流程。更加详细内容可参考触摸事件分发。本篇博客贴出【外部拦截法】和【内部拦截法】代码,供大家上手使用,然后...原创 2019-12-05 14:11:16 · 470 阅读 · 0 评论 -
View的滑动与弹性滑动(ScrollBy+Scroller)
这次做一个SwitchView1,与上文的效果是一样的,但是1.跟随手滑动使用scrollBy,2. 松手后的弹性滑动使用scroller需要使用下面的几个结论:结论系统很多控件都是使用了scrollBy+scorller来实现滑动效果的,例如ViewPager就是如此scrollBy(dx,dy)增量滑动,scrollTo(x,y)直接滑动到指定坐标处在本例中,一...原创 2019-12-03 19:39:43 · 368 阅读 · 0 评论 -
View的滑动与弹性滑动(改变View的参数+属性动画)
这次做一个SwitchView,需要使用下面的几个结论:结论:为了避免手写onMeasure和onLayout,不要直接继承ViewGroup,而是继承LinearLayout、FrameLayout、RelativeLayout这种已经重写过了onMeasure和onLayout的布局如何获取控件的宽高我们知道经常因为控件还没加载出来就去获取宽高,那么得到的宽高为0,使用vie...原创 2019-12-03 15:01:41 · 336 阅读 · 0 评论 -
自定义ViewGroup的一个综合实践 FlowLayout
效果原创 2019-12-02 19:45:18 · 244 阅读 · 0 评论 -
让自定义ViewGroup支持Padding
结论:让自定义ViewGroup支持Padding,需要自定义ViewGroup在自身的onMeasure和onLayout里去处理Padding即可因为padding很容易获得,不像是Margin那么麻烦,另外与margin不同的是,padding是自定义ViewGroup的padding,只有四个padding,而margin是子控件的margin,每个子控件都会有四个margin...原创 2019-12-02 16:03:23 · 547 阅读 · 0 评论 -
让自定义ViewGroup里的子控件支持Margin
结论:让自定义ViewGroup里的子控件支持Margin,需要自定义ViewGroup在自身的onMeasure和onLayout里去处理Margin,因为子控件写margin之后,必然会让自定义ViewGroup的宽高受到影响(所以onMeasure需要处理)子控件写margin之后,自定义ViewGroup在摆放这些子控件时候,必须考虑到margin,才能摆放到正确的位置但...原创 2019-12-02 14:27:16 · 663 阅读 · 0 评论 -
秒懂OnLayout
结论onLayout方法就是按照自己的意愿,把每个子控件排列起来,核心代码是通过layout()函数来设置子控件的位置。应用1. 接着上文完成MyLinearLayout (竖向的LinearLayout)上文已经通过重写onMeasure支持了的AT_MOST模式,还差重写onLayout就完成自定义ViewGroup了 @Override protected void...原创 2019-12-02 12:11:51 · 492 阅读 · 0 评论 -
秒懂OnMeasure
我感觉之所以写不好自定义view,是因为我们了解的自定义View的基础知识知道的太少,但是在了解自定义view的基础知识的过程中,又很容易被源码带跑偏,找不到重点,结果是看了很多源码,云里雾里等于没看。很多时候,源码是很重要,但是不懂适可而止的看源码,你就陷入了汪洋大海。例如:初中几何里老师讲了“两点之间、直线最短”这个公理后,我们就可以做很多几何题目了,做的过程中还很爽,但是老师没讲“两点...原创 2019-12-01 20:05:14 · 342 阅读 · 0 评论 -
处理滑动冲突:外部拦截标准模板
Android开发艺术探索package com.example.apple.quickdemo.realview;import android.content.Context;import android.support.annotation.Nullable;import android.support.v7.widget.LinearLayoutManager;import androi原创 2017-07-07 17:01:15 · 423 阅读 · 0 评论 -
PorterDuffXfermode学习笔记
PorterDuffXfermode是什么PorterDuffXfermode是一种规则 PorterDuffXfermode是一种颜色混合的规则 PorterDuffXfermode用于实现新绘制的像素(SRC)与Canvas上对应位置已有的像素(DEST)按照混合规则进行颜色混合。 记住:先绘制的图形为DEST 这个混合规则一个基本的知识点是,一个图片是由a和c组成的,a表示透原创 2017-05-27 10:46:10 · 303 阅读 · 0 评论 -
canvas操作
第一类基本变换效果连续性总结第二类画布的保存与恢复SavesaveLayersaveLayerAlpharestorerestoreToCount另clipsaveFLAG 摘自以下文章 自定义控件之绘图篇(四):canvas变换与操作 自定义控件三部曲之绘图篇(十三)——Canvas与图层(一) 自定义控件三部曲之绘图篇(十四)——Canvas与图层(二)原创 2017-05-27 10:40:17 · 589 阅读 · 0 评论 -
弹出、收缩的菜单
package pic.com.menudemo;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import andro原创 2016-07-07 17:30:32 · 1690 阅读 · 0 评论 -
自定义ViewGroup
引子:标准的自定义ViewGroup应该包含什么github第一部分支持wrap_content 即当ViewGroup的宽、高使用wrap-content时,ViewGroup的高宽根据子View的实际大小来确定 如果你不处理的话,“wrap-content”的和 “match-parent”是一样的ViewGroup支持Padding其子View支持margin支持自定义属性原创 2016-06-28 16:49:37 · 2200 阅读 · 0 评论 -
自定义布局---竖向的ViewPager
效果图:这个自定义控件涉及到的知识点:自定义ViewGroup中onMeasure和onLayout的写法 弹性滚动Scroller的用法 速度轨迹追踪器VelocityTracker的用法 如何处理滑动事件冲突dispatchTouchEvent:(外部拦截)告诉此ScrollLayout的父布局,什么时候该拦截触摸事件,什么时候不该拦截触摸事件onInterceptTouchEvent:(原创 2016-06-05 00:44:52 · 3002 阅读 · 1 评论 -
轮播图,使用简单,代码里一句话搞定,多个参数可自定义修改
github传送门效果图:实现的功能:1.自动、无限播放的轮播图,对应每个轮播图页面的点击事件(传递position) 2.手指在操作轮播图时(以及该页面不再显示时),轮播图自动播放功能会停止 3.手指停止操作轮播图时(以及该页面再次显示时),轮播图自动播放启动 用法及其注意事项:1.外部直接new即可,注意不是new LunBoTu而是new LunBoTu.Builder(具体用法参照dem原创 2016-05-05 15:30:21 · 1987 阅读 · 0 评论 -
ScrollerLayout——可横向滚动的自定义viewgroup
具体功能看效果图: 如何录屏小贴士 使用手机自带的录屏软件,录制后卫MP4格式,在使用下面这个网址介绍的方法,转为gif(我是用的是在线转的那个,挺好用) Android手机如何录制屏幕及转GIF这个自定义控件涉及到的知识点:自定义ViewGroup中onMeasure和onLayout的写法弹性滚动Scroller的用法速度轨迹追踪器VelocityTracker的用法如何原创 2016-05-09 11:20:33 · 3307 阅读 · 2 评论 -
VelocityTracker简单用法
VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event(比如Gestures中的Fling, Scrolling等), VelocityTracker通过跟踪一连串事件实时计算出,下面简单介绍一下用法。可参考:这篇文章的介绍//获取一个VelocityTracker对象, 用完后记得回收 //回收后代表你不需要使用了,系统将此对象在此分配到其他请求原创 2016-05-06 13:46:03 · 1062 阅读 · 0 评论 -
自定义控件---OnMeasure()方法分析
自定义View的第一步就是要测量Measure控件的大小,所以了解OnMeasure至关重要首先说说MeasureSpec类protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);原创 2016-04-13 20:32:13 · 703 阅读 · 0 评论 -
下拉刷新、上拉加载控件的写法(详解)
下拉刷新、上拉加载控件的写法(详解)本文详细讲解了下拉刷新、上拉加载控件的写法,如有需要完整代码可以到我的资源下载 先说一下心得:这是一个自定义控件,自定义控件分为两种: 一种是完全认为定义的,比如说常见的开关按钮,这个是原生 控件没有的;另一种是在原生的控件上添加一些新的功能,比如说上拉加载下拉刷新控件就是继承了ListView而增加了一些新功能构造函数——一个参数的构造函数用于java原创 2015-06-27 21:54:19 · 2382 阅读 · 0 评论 -
轮播图功能的全实现(自动播放、小点点、按住停止播放、放手后开始播放...)
MainActivity /** * 1.实现了轮播图自动滚动效果<br> * 2.设置了跟随页面变化的小点点<br> * 3.解决了轮播图手指滑动后,显示页面错位的问题<br> * 4.实现了手指按住轮播图时,停止自动滚动的效果<br> * 5.实现了点击轮播图,跳转到相关页面的操作<br> */public class MainActivity extends Activity {原创 2015-06-11 11:44:04 · 5866 阅读 · 0 评论 -
Shader应用---霓虹闪烁文字效果
package com.example.apple.shaderdemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Matri原创 2017-05-24 13:37:08 · 1748 阅读 · 0 评论 -
Shader的介绍
分类BitmapShader :图片贴图效果LinearGradient:线性渐变色效果RadialGradient:环形渐变色效果SweepGradient:雷达扫描效果ComposeShader:以上效果的任意组合基本用法在onDraw()里写下面的代码//构建画笔Paint mPaint=new Paint();//构建ShaderSweepGradient mSweepGr原创 2017-05-23 15:30:57 · 572 阅读 · 0 评论 -
View如何加载到窗口
View如何加载到窗口原创 2017-05-07 18:16:02 · 513 阅读 · 0 评论 -
自定义View---抽屉效果
说明这个自定义View,没有处理好多点触摸问题View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子View产生滚动效果menuView.layout(menuLeft, 0, menuLeft + menuWidth, menuHeight);相应的,由于没有使用scrollBy方法,就没有产生getScrollX值,所以不能通过Scrol原创 2016-08-22 21:59:31 · 1074 阅读 · 0 评论