自定义view

自定义悬浮滑动按钮,支持在父布局中跟随手指滑动,提供了两种实现方案。

假如想象 提交于 2020-12-24 08:21:05
MovingFloatButton 项目介绍 自定义悬浮滑动按钮,支持在父布局中跟随手指滑动,提供了两种实现方案。 https://github.com/ccMagic/MovingFloatButton 效果图: 代码说明(实现方案) 1、FloatMovingView public class FloatMovingView extends AppCompatTextView { private static final String TAG = "FloatMovingView"; private float mActualX; private float mActualY; private float mPreX; private float mPreY; private float mTranslationX; private float mTranslationY; private ViewGroup mParentViewGroup; private float mDefaultTopTranslationX; private float mDefaultTopTranslationY; private float mDefaultBottomTranslationX; private float mDefaultBottomTranslationY; private

GitHub标星4.6K+!手写一款基于MVVM模式开发框架,完美实现事件与数据源绑定!

删除回忆录丶 提交于 2020-04-08 14:03:26
前言 目前,Android流行的MVC、MVP模式的开发框架很多,然而一款基于MVVM模式开发框架却很少。MVVMHabit是以谷歌DataBinding+LiveData+ViewModel框架为基础,整合Okhttp+RxJava+Retrofit+Glide等流行模块,加上各种原生控件自定义的BindingAdapter,让事件与数据源完美绑定的一款容易上瘾的实用性MVVM快速开发框架。从此告别findViewById(),告别setText(),告别setOnClickListener()... 框架流程 框架特点 快速开发 只需要写项目的业务逻辑,不用再去关心网络请求、权限申请、View的生命周期等问题,撸起袖子就是干。 维护方便 MVVM开发模式,低耦合,逻辑分明。Model层负责将请求的数据交给ViewModel;ViewModel层负责将请求到的数据做业务逻辑处理,最后交给View层去展示,与View一一对应;View层只负责界面绘制刷新,不处理业务逻辑,非常适合分配独立模块开发。 流行框架 retrofit + okhttp + rxJava 负责网络请求; gson 负责解析json数据; glide 负责加载图片; rxlifecycle 负责管理view的生命周期;与网络请求共存亡; rxbinding 结合databinding扩展UI事件;

音视频入门之如何绘制一张图片

烂漫一生 提交于 2020-04-06 10:35:59
Android 的音视频入门学习,首先了解一下绘制图片。在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View作绘制图片。下面我以SurfaceView作重点来讲,为什么不用其他的来作例子,分析完SurfaceView就是知道为什么要用SurfaceView作例子。 SurfaceView 我们以下面几个点来了解SurfaceView SurfaceView 有那些相关类。 SurfaceView 有那些特点。 如何使用SurfaceView呢。 SurfaceView的优缺。 SurfaceView 在视频开发中应用在那里。 SurfaceView 其实是继承了View ,但与View又有一些区别,View是通过 onDraw(Canvas canvas)方法中的Canvas去绘制自身显示有界面上,而SurfaceView则不需要onDraw方法,有人会有些疑问,如果SurfaceView不需要实现onDraw方法怎么去绘制自身呢?其实View是在UI线程中绘制的,SurfaceView是在子线程中绘制的(即在一个子线程中对自己进行绘制)。在子线程中绘制怎么拿到canvas呢?下面我们去了解SurfaceView 有那些相关类。 SurfaceView 有那些相关类。 有三个重要的类,分别如下:

微信小程序-自定义复选框

走远了吗. 提交于 2020-04-04 06:56:18
功能: 1、需要多选复选框,并且可以上拉滚动;     2、需要通过名称手写字母排序的,并且可以上拉滚动; 常规的小程序自带的原生picker无法满足我们的要求,因此一些特殊效果需要我们自定义来实现,废话不多说,我们直接看效果: index.wxml布局 <view class="container"> <view class='class bgFFF' bindtap='isDep'> <view class='class-text'> <text class='red'> </text> <text>开放部门</text> </view> <view class='class-choose'> <text class='color333 perItem' wx:if="{{checkValue.length>0}}"> <block wx:for="{{checkValue}}" wx:key="index"> {{item}} </block> </text> <text wx:else>默认全部</text> <image src='/images/right-icon.png' mode="widthFix"></image> </view> </view> <view class='class bgFFF' bindtap='isPer'> <view class=

Android运行时异常“Binary XML file line # : Error inflating class”

删除回忆录丶 提交于 2020-04-03 01:55:07
在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常,然后整个程序Crash掉...... 我遇到该问题常常都是因为修改了资源文件所引起,大致有以下几种方式来解决: 1. 引用类名问题:自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。 2. 构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数 View(Context context) //Simple constructor to use when creating a view from code View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style 从文档上的介绍来看

阿里大神动态教你ViewGroup(实现微信朋友圈九宫格图片控件)你还不来看看吗?

风格不统一 提交于 2020-04-02 05:51:54
简介 最近项目里有个类似微信朋友圈的九图控件的需求,Github找了一下,发现都不太满足需求,我需要单张图片的时候可以按照图片宽高比列在一定范围内自适应,而大多开源项目单张图片也是一个小正方形,所以,干脆自己动手写一个 项目源码 具体自定义NineImageLayout过程,可以查看NineImageLayout。 效果图如下: 主要功能如下: 1:单张图片的时候支持按照图片宽高比列在设定区域内自适应 2:Adapter方式绑定数据和UI 3:图片点击事件回调 4:设置图片间隔大小 5:自由通过Glide设置ImageView圆角效果 使用 1:自定义属性如下 <resources> <declare-styleable name="NineImageLayout"> <!-- 控件宽高 --> <attr name="nine_layoutWidth" format="dimension"/> <!-- 单张图片时的最大宽高范围--> <attr name="nine_singleImageWidth" format="dimension" /> <!-- 图片之间间隙大小 --> <attr name="nine_imageGap" format="dimension" /> </declare-styleable> </resources> 2

仿抖音上下滑动分页视频

我的未来我决定 提交于 2020-03-30 05:55:37
目录介绍 01.先来看一下需求 02.有几种实现方式 2.1 使用ViewPager 2.2 使用RecyclerView 03.用ViewPager实现 3.1 自定义ViewPager 3.2 ViewPager和Fragment 3.3 修改滑动距离翻页 3.4 修改滑动速度 04.用RecyclerView实现 4.1 自定义LayoutManager 4.2 添加滑动监听 4.3 监听页面是否滚动 4.4 attach和Detached 05.优化点详谈 5.1 ViewPager改变滑动速率 5.2 PagerSnapHelper注意点 5.3 自定义LayoutManager注意点 5.4 视频播放逻辑优化 5.5 视频逻辑充分解藕 5.6 翻页卡顿优化分析 5.7 上拉很快翻页黑屏 01.先来看一下需求 项目中的视频播放,要求实现抖音那种竖直方向一次滑动一页的效果。滑动要流畅不卡顿,并且手动触摸滑动超过1/2的时候松开可以滑动下一页,没有超过1/2返回原页。 手指拖动页面滑动,只要没有切换到其他的页面,视频都是在播放的。切换了页面,上一个视频销毁,该页面则开始初始化播放。 切换页面的时候过渡效果要自然,避免出现闪屏。具体的滑动效果,可以直接参考抖音…… 02.有几种实现方式 2.1 使用ViewPager 使用ViewPager实现竖直方法上下切换视频分析 1

实时加载最新新闻列表(可展示网络图片)

好久不见. 提交于 2020-03-29 07:54:06
一、设计思路 1、数据源:新闻api:https://www.jianshu.com/p/c54e25349b77。 2、网络请求:封装一个网络请求工具(使用HttpURLConnection)发送URL,返回数据string。 3、数据获取:使用 AsyncTask 异步加载网络数据,及调用工具类的工具函数。 4、数据解析:根据返回的数据和需要的数据,处理从网上获取的字符串,并使用Gson工具将处理后的字符串转换为我们熟悉的java对象。  5、网络图片展示:自定义一个imageView,用于展示网络图片。(我的是:传入一个网络图片的网址->展示该网络图片) 6、数据展示:使用RecycleView展示列表数据(包括新闻图片、标题、概要、时间)。 7、分析可知需添加依赖: dependencies { implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'com.google.code.gson:gson:2.8.6' } 二、效果 三、源代码 1、用于发送网络请求的工具类: package com.me.androidstudy2.utils; import android.util.Log; import java.io.BufferedReader; import java.io

Binary XML file line #74: Error inflating class

こ雲淡風輕ζ 提交于 2020-03-28 20:11:48
在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常,然后整个程序Crash掉...... 我遇到该问题常常都是因为修改了资源文件所引起,大致有以下几种方式来解决: 1. 引用类名问题 :自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。 2. 构造函数问题 :自定义一个View,必须派生实现基类View的三个构造函数 View(Context context) //Simple constructor to use when creating a view from code View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style 从文档上的介绍来看

[Android]Android高级UI开发系列教程(一) - Android拖拽教程

给你一囗甜甜゛ 提交于 2020-03-27 17:05:58
教程索引 Android 拖拽(Drag and Drop)教程 Android 绘制(Drawables)教程 Android 样式和主题(Styles and Themes)教程 Android 动态壁纸(Live Wallpaper)教程 Android 主屏幕小部件(Homescreen Widgets)教程 Android 自定义视图(Custom Views)教程 Android 支持不同大小屏幕(Support different screensize)教程 Android 动画(animations)教程 Android 触摸(Touch)教程 Android 拖拽教程 开发环境: Eclipse 3.7(Indigo) 、Java 1.6 和 Android 4.0(Ice Cream Sandwich) 前言: Android 4.0 开始支持视图(Views)的拖拽。你需要在视图(View)上注册一个监听器(Listener),比如 OnTouchListener 或者 LongClickListener,并且需要定义一个视图(View)作为拖拽的目标视图对象,比如 拖放区(drop zones)。下面我们通过两段代码来学习一下。 第一段代码我们定义一个视图,你可以拖拽该视图