- 博客(46)
- 资源 (6)
- 收藏
- 关注
原创 Android 网络状态判断
2.1我们通过ConnectivityManager可以获取状态,但是我们需要考虑到Android版本不同获取方式不同。NetworkCapabilities.NET_CAPABILITY_INTERNET:判断是否连上网。NetworkCapabilities.TRANSPORT_WIFI:表示接入的是WIFI网络。判断当前是否能上网,但是发现小米11Android12添加证书后,一直是false。华为手机,在使用过程,网络状态不准确)1、获取网络信息,首先需要获取权限。
2023-12-22 14:05:22 1083
原创 Android app保活(前台服务)
国内厂商定制,除非厂商给app白名单,否则只能用户手动添加白名单(应用自启和后台运行),才能通过前台服务实现app保活。这里介绍前台服务相关实现方式。
2023-09-05 11:57:50 985 2
原创 Android 设置app深色、浅色、跟随系统
我们需要再用户设置时候,记录下来,用户的设置,等app再次启动时候,获取之前设置,重新设置。2、获取当前Activity是否开启深色。4、深色浅色切换时候,重启app。1、设置单个Activity。3、webView设置。
2023-08-24 11:07:48 1538
原创 Android 保存图片
如果需要BItmap与InputStream相互转换可以参考。保存图片我们需要考虑系统版本,Q前后还是不一样的。这个主要讲的InputStream去保存。
2023-08-24 10:40:43 563
原创 Android Bitmap压缩
我们在实际使用中,往往图片转化成Bitmap,对Bitmap操作的时候(如:截屏分享等),可能Bitmap会过大,导致无视实现对应功能。那么我们就需要对Bitmap进行压缩处理。
2023-08-23 15:04:46 561
原创 Android View截屏长图拼接(RecyclerView)
RecyclerView截屏,其实就是遍历每个itemView,得到每个itemView的Bitmap,然后拼接成一个Bitmap。
2023-08-23 14:51:53 734
原创 Android Bitmap、InputStream、Drawable、byte[]、Base64之间的转换关系
【代码】Android Bitmap、InputStream、Drawable、byte[]、Base64之间的转换关系。
2023-08-21 14:59:06 811
原创 ViewPager2嵌套ViewPager2(RecyclerView)滑动事件冲突
然而我们通过源码发现:getParent().requestDisallowInterceptTouchEvent(boolean)是决定是否拦截事件。官方通过get获取NestedScrollableHost第一层包裹的冲突View,如果冲突View层级深就会有问题。ViewPager+ViewPager就不会产生冲突,那是应为,官方ViewPager帮我们已经处理过,但是。java:我们通过getChildView()遍历拿到底层冲突View,可以完美解决滑动冲突问题。
2023-08-04 11:51:25 2082 1
原创 基于TabLayoutMediator实现TabLayout+ViewPager2(Fragment)封装
①、动态设置TabView(setTabViewResId),TextView动态设置IdseTabViewTextResId(),并获取TextView对象。④、UserTabSelectedListener,获取TabLayout切换时候监听回调,包含切换前后上个item position。⑤、设置和更新 未读数和小红,包含是否开启初始化后立马显示未读数和小红点,也可以网络请求后设置。⑥、TabView支持选中字体加粗、字体大小、颜色,未选中字体加粗、字体大小、颜色。
2023-08-03 19:01:28 987
原创 Android View截屏长图拼接(NestedScrollView)
NestedScrollView只有一个childView,虽然没有全部显示在界面上,但是已经全部渲染绘制,因此可以直接 调用NestedScrollView.draw(canvas)来完成截图,具体看代码逻辑。
2023-07-18 18:58:46 323
原创 Android获取本地相册中图片视频
这里,我们需要注意,因为android10以后版本不能通过File来获取图片文件,所以我们需要通过Uri来讲图片文件转到沙箱文件中,来压缩等操作。如果是AndroidQ一下,其实我们再获取图片封装对象里面,就已经得到Path,可以直接使用。其实,视频跟图片获取逻辑也是一样,主要查询字段不一样来区分,获取视频还是图片。其实视频,我们会涉及到一个问题,就是封面展示的问题。第二种:获取视频文件第一帧,作为封面。第一种:直接通过Gilde做展示。第三种:获取数据库中视频的封面。都是通过相册数据库获取对应数据。...
2022-08-26 19:18:17 2758 1
原创 Android页面View截图(分享、保存相册)
方法一:通过系统方法获取图片Bitmap实现分享(Deprecated) @Deprecated public static Bitmap loadBitmapFromView(View view) { Bitmap drawingCache; if (true){ //方法一: view.setDrawingCacheEnabled(true); drawingCache = vie
2022-03-24 13:04:18 3764
原创 Android h5(分享页面)唤醒app,并跳转指定界面
现在基本所有h5流量都会往自家app导入流量。所以我们常见会发现浏览器打开网页、微信分享文章扥等都有打开app的按钮1、app代码<activity android:name=".AwakenActivity" <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.categ..
2022-01-20 12:38:55 5512
原创 Android 越界回弹(支持水平和垂直方向)
1、直接上图:2、直接上代码public class DampingReboundLayout extends ViewGroup implements NestedScrollingParent3, NestedScrollingParent2, NestedScrollingChild3, NestedScrollingChild2, NestedScrollingParent, NestedScrollingChild { private st.
2021-11-01 11:50:21 1481
原创 Andorid RecyclerView 局部刷新--倒计时
前面我们介绍RecyclerView局部刷新功能实现,我们可以利用局部刷新功能实现倒计时功能。倒计时其实就是每个1秒去刷新TextView,实现时间变化,然而在RecyclerView itemView 复杂时候,我们全局刷新,往往会造成性能损耗,所以我们采用局部,只刷新TextView 一个控件来实现倒计时功能1、handler + recyclerView 来实现列表倒计时handler用来延迟一秒实现倒计时效果,通知RecyclerView刷新单个条目TextView时间...
2021-10-18 16:03:12 259
原创 Android 弹幕(bilibili-DanmakuFlameMaster)—1
1、地址:DanmakuFlameMaster2、依赖:implementation 'com.github.ctiao:DanmakuFlameMaster:0.9.25'implementation 'com.github.ctiao:ndkbitmap-armv7a:0.9.21'// Other ABIs: optionalimplementation 'com.github.ctiao:ndkbitmap-armv5:0.9.21'implementation 'com.gith
2021-10-14 11:05:16 1201 1
原创 Android 透明度对应色值
100% — FF99% — FC98% — FA97% — F796% — F595% — F294% — F093% — ED92% — EB91% — E890% — E689% — E388% — E087% — DE86% — DB85% — D984% — D683% — D482% — D181% — CF80% — CC79% — C978% — C777% — C476% — C275% — BF74% — BD73% — BA72%
2021-09-27 15:20:39 366
原创 Android RecyclerView 局部刷新
我们在列表数据更新某一个状态:1、往往由于Item view 中包含有图片,自然而然图片(Glide)刷新,这样会有闪一下效果,用户体验不是很好。2、界面会重绘,由白白损耗性能。那么RecyclerView 有没有一种只刷新某一个View呢?其他在源码中是有的。两个都是 onBindViewHolder只是参数不一样,实际上payloads这个参数就是用来区分局部刷新的。我们只需要在adapter 重新这两个方法。我们只需要在调用做区分就可以了。总结:1.
2021-08-25 19:27:19 807
原创 Android View 关于OnLongClickListener
View的OnLongClickListener事件实现原理是什么,又是如何触发(postDelayed),长按时间多久呢(0.4s)?1、通过源码我们发现View.setOnLLongClickListener()方法中: setLongClickable(true); getListenerInfo().mOnLongClickListener = l;public void setOnLongClickListener(@Nullable OnLongClickListe...
2021-08-05 14:56:31 855
原创 Android 开发多行TextView背景色
我们在开发文字背景色时候,往往ui设计稿是背景色只是文字区域,但是系统自带的BackgroundColorSpan 无法达到这样效果,所以我们需要自定义背景色。|贴上自定义BackgroundColorSpan代码:public class BetterHighlightSpan extends ReplacementSpan { private int backgroundColor; //行间距 private int lineSpacingExtr.
2021-08-03 18:03:55 564 2
原创 Android EditText java 设置 maxLength
我们在开发过程,经常会遇到EditText 设置可输入内容长度,但是发现java代码没有set方法,通过源码,我们发现InputFilter的妙用所在。在TextView中我们发现maxLength默认值为-1,并且当mxLength大于等于0才会设置LengthFilterif (maxlength >= 0) { setFilters(new InputFilter[] { new InputFilter.LengthFilter(maxlength) });} else {
2021-08-02 15:35:37 2667
原创 Android span 图文混合效果--图片居中显示
TextView 添加图片往往UI要的效果是居中,下面将图片居中,同时添加图片与文字的间距。public class CenterSpaceImageSpan extends ImageSpan { //左边距 private int mMarginLeft = 5; //右边距 private int mMarginRight = 5; public CenterSpaceImageSpan(Drawable drawableRes) {...
2021-08-02 14:38:21 536
原创 Android EditText 不得不说的InputFilter、TextWatcher、ActionMode.Callback、OnEditorActionListener
开发过程中,输入内容往往会遇到各种奇葩的限制输入1、editText.setFilters() editText.setFilters(new InputFilter[]{new InputFilter() { /** * editText 内容不变处理 * @param source 变化的字符串 * @param start 变化字符的首字符下标
2021-06-07 11:58:14 547 1
原创 Android 10 TextView 内容显示不在同一水平线上
<LinearLayout android:layout_width="match_parent" android:layout_height="100dp" android:orientation="vertical"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:...
2021-05-13 18:32:30 298
原创 Android 实现表情功能(Dialog)
Dialog实现表情评论功能核心问题:1、如何得到键盘弹起和隐藏状态2、在于表情和键盘切换时候,防止Dialog抖动问题1:由于无法获取键盘弹起状态,但是键盘弹起,View尺寸变化,同时被onSizeChanged()调用。View 源码: /** * This is called during layout when the size of this view has changed. If * you were just added to the view ..
2021-05-12 18:17:17 464 1
原创 Android 实现震动功能(Vibrator)
1、权限:<uses-permission android:name="android.permission.VIBRATE" />2、实现震动//BaseConstantValue.VIBRATE_TIM 震动时间 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) { vibrator = (Vibrator) context.getSystemService(Service.VIBRATOR_S.
2021-05-12 14:38:57 631
原创 Android 播放音频 (MediaPlayer、SoundPool )
Android 播放音频一般有两种方式:ps:这里只介绍基本使用,后续会详细介绍1、MediaPlayer播放器(同时只能播放一个音乐. 可以播放大文件. 播放背景音乐)MediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(context,R.raw.test);mediaPlayer.prepare(); // 准备.mediaPlayer.start(); //播放或者/** *无需me
2021-05-12 14:20:19 647
原创 Android span 文字背景色、前景色、圆角
1、可参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0305/2535.html2、自定义 设置文字背景色、前景色、圆角度public class BackgroundSpan extends ReplacementSpan { private int textColor; private int bgColor; private int radius = 0; private int.
2021-04-26 17:27:38 1011
原创 Android webSocket(okhttp-4.9.0)
开发过程,部分需要webSocket,这里使用 okhttp 自带socket。一、依赖:com.squareup.okhttp3:okhttp:4.9.0二、创建webSocket1、创建okhttpClient和Requestpublic void init(){ //初始化okhttpClient mBuilder = new OkHttpClient.Builder(); //设置读取超时时间 mBuilder.readTimeo
2021-04-26 17:24:41 691 1
原创 AppBarLayout+RecyclerView 处理快速滑动RecyclerView后,点击AppBarLayout无法停止滑动趋势问题
AppBarLayout+RecyclerView滑动趋势问题,一直是google官方的bug,至今尚未修复。废话不多说,直接上代码1、xml文件 <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"
2021-03-25 18:06:55 636
原创 Android View 跑马灯效果
TextView 跑马灯效果 文字内容长度大于控件自身宽度时候,开启跑马灯效果public class AutoPollTextView extends View { private int textColor; private int textSize; private Rect rect; private TextPaint paint; private String contentStr = ""; private String showCon.
2021-03-25 13:47:27 135
原创 Android 极光各厂商配置
废话不多说,直接上地址:https://www.yuque.com/books/share/5791dcf9-177f-4065-a2cd-d9143fec68f5/qicgow
2021-03-24 15:19:36 244
原创 Android 悬浮窗
一、权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />二、悬浮窗其实就是 WindowManager.addView(view,layoutParams),直接上代码1、单例创建FloatWindowManager/** 悬浮Manager*/public class FloatWindowManager { private volatile static.
2021-03-24 15:09:14 515
原创 Android BottomNavigationView 底部导航
AndroidDesign Support Library 25 中增加了BottomNavigationView这个控件。该控件可以为我们很方便提供底部导航,下面我们介绍一下该控件。1、依赖:build.gradle文件中增加依赖compile 'com.android.support:design:25.3.1'2、xml文件:<android.support.design.widget.BottomNavigationView ...
2021-03-24 14:34:52 2441
转载 Android -- 基础篇 -- Activity跳转动画的五种方式(下)
上一篇文章中我们讲解了在Activity启动过程中获取组件宽高的五种方式。在Activity的启动过程中如果我们直接在生命周期方法中通过view.getWidth()或者是view.getHeight()方法获取组件的宽度和高度其结果都是0,为什么会出现这个问题呢?其实看过我以前写过的Activity启动流程Activity布局加载流程Activity布局绘制流程的同学应该对Activity的启动流程和其布局加载绘制流程不陌生,Activity的启动流程和Activity的布局文件加载绘制流...
2021-03-24 14:34:13 9915
原创 Android -- 基础篇 -- Fragment转场动画 (中)
一、简介:本文将讲解Fragment切换动画。二、Fragment转场动画Fragment的转场动画实现分为使用v4包和不使用v4包两种情况,不使用v4包的话,最低APILevel需要是11。1、标准转场动画: 可以给Fragment指定标准的转场动画,通过setTransition(inttransit)方法。 该方法可传入的三个参数是: TRANSIT_NONE//无动画 TRANSIT_FRAGMENT_OPEN//打开形式的动画 TRAN...
2021-03-24 14:33:01 1162
阿里巴巴java开发手册1.4.0(详尽版)
2019-03-06
阿里巴巴Android开发手册1.0
2019-03-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人