UI篇章
文章平均质量分 59
李国菁LGJ
一名小菜鸟,需要大神提携
展开
-
ViewPager + Fragment 架构中如何处理预加载问题
1、由于ViewPager设置setOffscreenPageLimit(0)无效,导致当前缓存的Fragment的数量总是 limit * 2 + 1 个,假设 setOffscreenPageLimit(1)设置的是1,然后当前选中的是第一个Item,此时它也会把下一个Item对应的Fragment加载出来,并且走完该有的声明周期,如上图所示2、分析原因是因为,这个是ViewPager的机制,始终会至少缓存2个Fragment,如何处理这个问题呢,接下来分析。首先,搞明白整个调用流程,当我们原创 2021-02-13 23:29:02 · 423 阅读 · 0 评论 -
Android自定义控件绘制鱼,并且模拟鱼游动
整体代码鱼的游动还是不太明白,抄的享学老师的代码,先这样吧先上效果图:画鱼的代码package com.lgj.xxkt.ui;import android.animation.ValueAnimator;import android.graphics.Canvas;import android.graphics.ColorFilter;import android.graphics.Paint;import android.graphics.Path;import android.原创 2021-02-12 09:36:40 · 412 阅读 · 0 评论 -
ConstraintLayout 可以解决布局嵌套问题
一、先演示简单的使用实现如下效果图:<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http原创 2021-02-06 20:03:04 · 771 阅读 · 0 评论 -
Android 从源码的角度分析事件分发流程
一、这里讲的是单点触摸,一个事件序列是由 down – move – up 组成1、首先当手指点击屏幕的时候,Activity会拿到这个事件,经过一层一层的分发,最终才能到达View上。// 这个就是Activity的dispatchTouchEvent方法public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onU原创 2021-01-31 22:56:02 · 88 阅读 · 0 评论 -
Android 文字的绘制,应用歌词
一、文字的绘制机制文字绘制机制是基于文字的baseline绘制的,baseline又是什么,看下图所以 下面这种方式,文字是看不见的,因为baseline的坐标是0canvas.drawText("李国菁",0,0,paint);二、设置文字对齐方式第一种方式设置水平居中paint.setTextAlign(Paint.Align.CENTER);第二种方式设置水平居中// 第二中方式计算,X 轴居中float width = paint.measureText(mText);ca原创 2021-01-17 22:21:39 · 236 阅读 · 0 评论 -
Android setContentView加载流程以及换肤应用
一、首先从Activity的启动讲起1、Activity的启动是通过ActivityThread的performLaunchActivity开始。2、然后创建Activity的上下文 ContextImpl appContext = createBaseContextForActivity()3、然后创建Activity( activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent))4、此时给Wind原创 2021-01-09 18:01:23 · 244 阅读 · 2 评论 -
lgj
package cn.itcast.zhxa11.widget;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import andr...原创 2020-04-28 22:28:51 · 416 阅读 · 1 评论 -
ScrollView 嵌套ListView 导致ListView条目显示不全问题记录
第一种解决方案,重新ListView的onMeasure 方法public NoScrollListview(Context context, AttributeSet attrs) { super(context, attrs); } /** * 避免ScrollView 嵌套 listview 显示不全问题 */ @Overrid...原创 2020-03-04 21:20:21 · 104 阅读 · 0 评论 -
View.inflate() 和 LayoutInflater.from(this).inflate() 的区别
llContainer = findViewById(R.id.llContainer);// 第一种情况下: View view = View.inflate(this, R.layout.activity_test, null);// inflate(resource, root, root != null); R.layout....原创 2019-12-30 19:29:51 · 474 阅读 · 0 评论 -
Android switch控件的使用
关闭下的状态打开下的状态 <Switch android:id="@+id/s_w" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="16dp" andro...原创 2019-12-22 15:54:16 · 287 阅读 · 0 评论 -
自定义View 实现一道亮光闪过
package com.example.lightline;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics....原创 2019-12-21 22:42:58 · 413 阅读 · 0 评论 -
优雅的让TextView 全部展示出来
这里最主要的是使用到一个类 ValueAnimator 这个类的作用是产生一系列的中间变化值// 优雅的显示 private void visibityHeight(final View view) { if (view.getLayoutParams().height <= 0) { ValueAnimator animator =...原创 2019-12-20 17:28:36 · 173 阅读 · 0 评论 -
RecyclerView 的 adapter.notifyItemChanged(position) 导致该条目布局放生改变
seatAdapter.notifyItemChanged(position);原因分析:是因为TextView高度为wrap_content,如果改成match_parent,并且父布局高度写死,那么就OK,记录一下,方便以后碰到此问题,能尽快处理,还有如果只能Item宽度为 match_parent 但是条目实际显示在屏幕并不是match_parent,那么我的修改办法是加一个分割...原创 2019-12-18 14:31:28 · 1134 阅读 · 0 评论 -
Android 实现view背景图片的移动
注意:用的时候需要在activity销毁之前需要把,mHandler中消息清空,否则会造成内存泄漏,因为mHandler 会对外部类有一个引用,也就是CoolImageView,然后CoolImageView 又引用当前的Activity所以会造成内存泄漏public class CoolImageView extends ImageView { private Drawable m...原创 2019-11-17 15:48:16 · 516 阅读 · 0 评论 -
layer-list 的高级用法
使用layer-list 设置某一条边框下面的这个是设置右边和下边是1px的背景边框<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:left="-2dp" android:top="-2dp"> ...原创 2019-11-08 15:27:30 · 2088 阅读 · 0 评论 -
Android 共享元素动画简单应用
Android 5.0 之后开始支持共享元素动画,该动画主要应用于两个Activity之间,两个Activity之间可以共享某些控件,Activity A跳转到Activity B的时候,A的某个控件能自动移动到B的相应控件的位置,产生动画。该动画看起来很高大上,而且实现方法非常简单,是我目前见过的实现起来最简单的动画了。1、要在来个Activity的共享控件中,都需要加上这个共享属性,并保持值...原创 2019-10-24 14:14:19 · 215 阅读 · 0 评论 -
Android 高斯模糊
public void mohu(){ i++; System.out.println("i : " + i); // BitMapDrawable 是Android 下的通用图形对象,可以装载常用格式的图像 GIF PNG JPG 当然也支持BMP// Bitmap是 Drawable 但Drawable 不一...原创 2019-10-18 09:14:23 · 148 阅读 · 0 评论 -
Android 点击View炫酷动画
package view;import android.animation.ObjectAnimator;import android.animation.PropertyValuesHolder;import android.annotation.SuppressLint;import android.content.Context;import android.util.Attr...原创 2019-10-14 16:36:13 · 297 阅读 · 0 评论 -
权限总结
Android6.0 之后有些重要权限(通话,读取SD卡),除了需要在Manifest.xml中需要配置外,还需要动态的申请,这些动态申请的权限可以在系统设置中被手动关闭,另外对于普通的权限任然需要在Manifest.xml文件中静态注册,对于普通的权限有:android.permission.ACCESS_LOCATION_EXTRA_COMMANDSandroid.permission...原创 2019-06-16 19:28:58 · 144 阅读 · 0 评论 -
app:layout_scrollFlags不同属性的值对应不同的滑动方式
ToolBar上添加了 app:layout_scrollFlags这个属性,给这个属性添加不同的值,效果是完全不同的,下面来讲解下各个值的效果:先说当app:layout_scrollFlags=“scroll”,此时TollBar会随着手指的滑动滚出屏幕,或者滚进屏幕,此时TollBar和下面的滑动控件(比如NestedScrollView,RecycleView)是融为一体的,当app...原创 2019-05-19 15:54:53 · 619 阅读 · 0 评论 -
工具栏 ToolBar
快速入门 1.必须在Activity配置的theme中去除ActionBar 如使用Theme.AppCompat.Light.NoActionBar <item name="windowActionBar">false</item> <item name="windowNoTitle">true&...原创 2019-04-21 16:42:49 · 175 阅读 · 0 评论 -
沉浸式状态栏
官方的沉浸式状态栏:Google解释就是让整个APP沉浸(充斥整个屏幕),没有显示状态栏,甚至没有显示导航栏(就和平时看书的APP类型)但是平时大家所讨论的沉浸式状态栏是,顶部Toolbar和状态栏的颜色是一致的兼容开发:5.0+ API 版本以上很容易做到1:5.0+自动实现了沉浸式效果, 想要实现直接修改,colorPrimaryDark 这个属性的颜色@color/colorPri...原创 2019-04-06 13:37:03 · 97 阅读 · 0 评论 -
PreferenceScreen 的使用
java代码:public class Main3Activity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// setContent...原创 2018-10-21 22:18:51 · 2992 阅读 · 0 评论 -
Android 隐士意图启动其他界面的那些坑
category匹配规则:intent中如果有那么必须和过滤规则中的一个category相同,如果不设置category也可以匹配,原因是系统在调用startActivity或者startActivityForResult时默认为intent加上了 android.intent.category.DEFAULT,所以在隐式调用时必须加这个category必须在 中设置默认的categor...原创 2018-10-09 21:29:23 · 448 阅读 · 0 评论 -
ProgressBar
java 代码package com.example.progressbarview;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;...原创 2018-09-25 16:06:23 · 99 阅读 · 0 评论 -
UI TextInputLayout 的简单用法
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http:原创 2018-09-12 15:26:15 · 165 阅读 · 0 评论 -
Android 第一次启动全屏时出现短暂的状态栏
Android 第一次启动全屏时出现短暂的状态栏一般设置全屏可以通过代码 //继承AppCompatActivity去掉标题栏// supportRequestWindowFeature(Window.FEATURE_NO_TITLE); //设置成全屏,这种设置会出现短暂的状态栏,// getWindow().setFlags(W...原创 2019-06-25 10:37:46 · 1415 阅读 · 0 评论 -
Android RecyclerView设置Item间距
recyclerView 的 item 默认是带有列间距的,但是上下是没有间距的,上下2个Item是紧挨着的,这样看起来比较难看,接下来解决这个问题首先MainAtcity代码: //设置recycler的显示方式为2列 recyclerView.setLayoutManager(new GridLayoutManager(this,2)); //添加Item...原创 2019-07-08 13:57:40 · 2069 阅读 · 0 评论 -
Android shape select 标签通过代码进行创建
其实Android中shape标签就是用来画矩形、椭圆、圆等图形,但是这些都可以通过代码进行创建,对应的类是:GradientDrawable 具体的实现方式如下: //这步就相当于创建shape标签 GradientDrawable gradientDrawable = new GradientDrawable(); //指定shape标签的形状,下面指定的是矩形 gradient...原创 2019-07-03 09:46:14 · 121 阅读 · 0 评论 -
Activity 的布局显示在状态栏下面
首先说明状态栏和导航栏窗口是系统窗口,而activity对应的是应用窗口,他们属于不同层级的窗口然后状态栏/导航栏系统级窗口是在App应用窗口之上,所以activity可视内容的区域是除去状态栏和导航栏及系统应用窗口区域进行显示 protected void setStatusBarFullTransparent() { if (Build.VERSION.SDK_INT...原创 2019-09-16 16:48:06 · 1902 阅读 · 0 评论 -
DialogFragment 出场动画
DialogFragment 其实就是继承fragment,用Fragment的事物进行管理首先在onCreate中指定DialogFragment 所对应的样式setStyle(DialogFragment.STYLE_NO_FRAME, R.style.DialogStyle); <style name="DialogStyle" parent="@android:styl...原创 2019-09-15 16:37:57 · 3029 阅读 · 0 评论 -
Android onClick事件的执行条件
关于Android onClick 事件的执行条件,一个事件到达一个View上首先会调用,这个View的dispatchTouchEvent(MotionEvent event)事件if (onFilterTouchEventForSecurity(event)) { if ((mViewFlags & ENABLED_MASK) == ENABLED && hand...原创 2019-09-11 20:42:53 · 533 阅读 · 0 评论 -
CollapsingToolbarLayout 可折叠的标题栏
先去掉系统自带的ActionBar,设置当前的Activity主题为:Theme.AppCompat.Light.NoActionBar布局文件<?xml version="1.0" encoding="utf-8"?><androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://sc...原创 2019-08-22 16:59:08 · 135 阅读 · 0 评论 -
TabLayout 中item设置宽度 API28以上
首先说明一下,TabLayout 中如果只用一个item的时候,此时设置是不起作用,原因我也没查,估计是源码底层做了限制 <!--tabIndicatorColor 底下标签的颜色值--> <!--tabSelectedTextColor 选中时的文字的颜色--> <!--tabBackground 整个item的背景-->...原创 2019-09-05 16:17:38 · 2733 阅读 · 0 评论 -
RecyclerView 实现不同大小的分割线
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190802232428822.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTQxMzc3OA==,size_16,color_...原创 2019-08-02 23:30:22 · 453 阅读 · 0 评论 -
Android 自定义View 不规则的排布效果
之前对自定义的measure和layout理解的不是很深刻,最近项目不是很忙,就学习学习这块,写一个Demo,效果图如下:原创 2019-07-05 11:42:52 · 1015 阅读 · 1 评论 -
Android 自定义控件关于measure的讲解
首先在activity的onCreate(),方法中直接调用getWidth(),或者是调用getMeasureWidth(),此时获取的宽度都是为0,因为view还没有进行测量绘制,那么必须要在onCreate(),方法获取的话,可以通过监听视图树,代码如下: tv.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTree...原创 2019-07-04 10:26:52 · 352 阅读 · 0 评论 -
DrawerLayout 防qq特效
DrawerLayout 用法,先从布局文件看,如下所示 “ 需要注意的是:用ToolBar替换ActionBar的时候,必须调用这个方法supportRequestWindowFeature(Window.FEATURE_NO_TITLE);否则会报错package com.example.bluetooth; import android.support.v7.app.Acti...原创 2018-09-11 16:51:03 · 183 阅读 · 0 评论