- 博客(31)
- 资源 (3)
- 收藏
- 关注
原创 LayoutInflater学习(二)之创建布局View
这篇是在上篇的基础上继续学习LayoutInflater,上篇主要讲了LayoutInflater是怎么解析布局的,但是并没有去仔细地说明LayoutInflater创建View的过程,这篇就补上这部分。
2023-01-10 22:57:44
449
原创 LayoutInflater学习(一)之布局解析
原因分析:通过观察上面第3种情况时的源码就可以知道,当 root 为null时,我们通过LayoutInflater的 inflate 方法加载布局时,在 inflate方法中创建完成xml中最外层的View时,并没有为该View设置布局参数就直接返回了,所以此时 xml 布局中最外层布局的参数LayoutParams是无效的,也就是我们在 xml 中给最外层View设置的宽、高的参数是无效的。LayoutInflater是位于 "android.view" 包下的一个抽象类,同样它也是一个系统级服务。
2023-01-10 22:55:06
517
原创 安卓PorterDuffXfermode之正片叠底 PorterDuff.Mode.MULTIPLY
Paint#setXfermode()接口是在绘制时设置画笔的图形混合模式的,下面是官网的介绍:setXfermodepublic Xfermode setXfermode (Xfermode xfermode)Set or clear the transfer mode object. A transfer mode defines how source pixels (generate by a drawing command) are composited with the destin
2022-12-20 06:05:10
894
原创 Android View绘制 Canvas学习
今天记录一个关于Canvas绘制的小demo,非常简单的一个小功能,在屏幕上绘制一个绿色的矩形框,当手指点击区域在矩形框内部时,矩形框由绿色变为红色,先看下效果图完整实现代码及相关笔记如下package com.lollo.custom.canvasdemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphic
2022-01-08 19:56:16
1764
原创 RecyclerView缓存机制源码学习
RecyclerView缓存数据结构RecyclerView相比ListView缓存机制更为复杂些,它一共有四级缓存,RecyclerView中缓存相关的代码在它的内部类 Recycler里,先来看一下Recycler中相关的数据结构第一级:mChangedScrap(离屏) 与 mAttachedScrap(未离屏) ---》 回收相关方法:recycler.scrapView(view);第二级:mCachedViews---》 默认大小为2 ---》 回收相关方法:recycler.rec
2021-03-05 09:59:07
366
2
原创 ListView缓存机制源码学习
文章参考:https://blog.youkuaiyun.com/guolin_blog/article/details/44996879ListView缓存机制所需的数据结构 class RecycleBin { private View[] mActiveViews = new View[0]; private ArrayList<View>[] mScrapViews; private ArrayList<View&
2021-02-28 11:18:26
156
原创 Fragment使用过程中遇到的一些问题
先看下 Fragment 的基础用法,这是Fragment动态用法四部曲1.获得FragmentManager对象,通过getSupportFragmentManager()2.获得FragmentTransaction对象,通过fm.beginTransaction()3.调用add()方法或者repalce()方法加载Fragment;4.最后调用commit()方法提交事务FragmentManager fragmentManager = getSupportFragmentManag
2021-02-24 13:32:14
931
原创 Fragment源码学习(一)
Fragment源码学习首先看一下 Fragment 的基本用法 FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.frameLayout, Bug5Fragment.newIntance(), B
2021-02-21 13:36:03
275
原创 Glide 的缓存机制
Glide 的缓存机制,需要了解 LruCache 和 DiskLruCache,可以参考以下两篇博文https://blog.youkuaiyun.com/guolin_blog/article/details/28863651下面我们通过写一个阉割版的Glide来了解一下Glide的缓存机制首先看一下Glide的一行代码经典用法private final String IMAGE_URL = "http://p1.pstatp.com/large/166200019850062839d3";
2021-01-20 17:12:18
361
2
原创 Android LayoutInflater inflate方法学习
结合Andorid 9.0 的代码,记录一下学习过程,大多时候是用的下面这个方法public View inflate(@LayoutRes int resource, @Nullable ViewGroup root) { return inflate(resource, root, root != null); }还有就是重载的另一个方法:public...
2020-01-18 21:28:21
198
原创 Android 简单的自定义View继承ViewGroup代码学习分享(一)
注明:该实例取自Android开发艺术探索在这里记录一下自己学习过程中遇到的一些问题与大家分享,也方便自己以后查阅,水平有限,欢迎批评指正。请看一下运行效果下面是核心代码实现,其中的笔记是我测试过程中遇到的一些问题@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec...
2020-01-14 19:23:12
288
原创 Activity 的 Window 创建主要流程
首先是在 ActivityThread 的 performLaunchActivity() 方法中创建Activity实例,并调用 Activity 的 attach 方法xref: /frameworks/base/core/java/android/app/ActivityThread.javapackage android.app;......public final cla...
2020-01-13 13:41:05
175
原创 Android 实现简单的悬浮窗按钮(二)
这篇主要分析 Window 的工作机制,WindowManager 添加 Window (View) 的主要流程以下是Android9.0 的源码首先看一下 WindowManager.javaxref: /frameworks/base/core/java/android/view/WindowManager.javapackage android.view;.........
2020-01-13 09:57:33
784
原创 Android 实现简单的悬浮窗按钮(一)
先来看一下实现效果吧功能较为简单,直接贴出主要实现代码:public class MainActivity extends AppCompatActivity implements View.OnClickListener,View.OnTouchListener{ private WindowManager.LayoutParams mParams; private...
2020-01-12 17:03:35
6091
3
原创 Handler如何通过sendMessage(Message msg)方法将新消息加入当前消息队列(二)
这里假设我们是通过Handler 的 sendMessage(Message msg) 来发送消息的首先进入 sendMessage 方法 public final boolean sendMessage(Message msg) { return sendMessageDelayed(msg, 0);//注意第二个参数传入的是整数 0 ...
2020-01-03 13:38:20
1129
1
原创 Handler如何通过sendMessage(Message msg)方法将新消息加入当前消息队列(一)
首先需要先理清 Handler、MessageQueue、Looper 之间的关系。我们使用Handler的时候(UI主线程)一般是通过以下两种方法去创建一个Handler实例1. 最常用的方法:方法1Handler mHandler =new Handler(){ @override public void handleMessage(Message msg){ ...
2020-01-03 10:26:47
2338
原创 简单的Socket通信实例:实现Android客户端与PC服务端的简单通信
今天来写一个使用Socket通信的小小实例实现效果:快看动图效果说明:当点击发送时,是先将文本内容发送到本地服务器,之后再从服务器中获取显示到TextView中的PC服务端实现:package com.lollo.server;import java.io.DataInputStream;import java.io.DataOutputStream;impor...
2019-11-03 20:16:14
841
3
原创 蓝桥杯 基础练习 十六进制转八进制
//下面的代码实现部分全部放在了main函数中,看起来有些不清晰package jinzhizhuanhuan2;/* * * 测试成功。 * 经验:当修改了代码中的某个变量的名字是,特别注意:所有涉及到该变量的地方都要修改 * 遗漏任何一处,可能运行出错!!! */import java.util.Scanner;public class HextoOcalPrac {
2017-03-01 12:42:21
503
原创 蓝桥杯 基础练习 十六进制转十进制 java
package jinzhizhuanhuan;import java.util.Scanner;public class HextoDecimal { public static int compare(char ch){//将A~F转换为对应的十进制数 int[]a=new int[75]; int k=65,i=10;//A的assic码为65 while(i<16)a[k
2017-02-25 13:24:56
2612
原创 蓝桥杯 算法训练 表达式计算 Java
package algortest;/* * 思路1:定义一个char型变量以单个字符为单位从键盘接受一个字符,然而java只能从键盘接受String * 型的字符串,此方法实行起来较为困难 * * 思路2:定义一个String型变量,先从键盘把要计算的表达式全部接收(比如:123*(8-9)) * 然后再逐一的扫描改表达式字符串,该方法可行! *
2017-02-23 21:59:15
1057
原创 杭电HOJ1034 Candy Sharing Game 的一种解法
#include#include#define max 1005int a[max];int istop(int*s,int n){ int ok=1; for(int i=1;i { if(s[0]!=s[i])ok=0;//只要有一个糖果数不等就为0 if(!ok)break; } /*for(int i=0;i printf
2016-11-09 13:18:10
423
原创 杭电HDOJ 1029 Ignatius and the Princess IV
#include#include#define max 1000000int a[max];int main(){ int n; while(scanf("%d",&n)!=EOF) { memset(a,sizeof(a),0); int tatol=(n+1)/2; int tem,num;
2016-11-07 12:58:55
385
原创 HDOJ杭电oj 1021Fabonacci Again 的一个愚蠢而又快速的方法
//代码只有如下几行#includeint main(){ int n; while(scanf("%d",&n)==1) { if(n%4==2)printf("yes\n"); else printf("no\n"); } return 0;}//上面的代码是通过下面的代码找出
2016-11-05 12:41:02
365
原创 杭电HOJ 1013 Digital Roots
import java.math.BigInteger;import java.util.Scanner;public class Main{ public static BigInteger seperate(BigInteger n){ BigInteger sum=BigInteger.ZERO; while(!(n.divide(BigInteger.TEN).equa
2016-11-01 21:14:01
334
原创 杭电HDOJ1012 u Calculate e
#includeint f(int n){ return n}int main(){ const int n=9; double sum=0; printf("n e\n- -----------\n"); for(int i=0;i { //printf("1/f(%d)=%f\n",i,1/(double)f(i)); //if(!i)
2016-11-01 18:01:34
312
原创 HDOJ1005 Number Sequence
#includeint a,b;int f(long n){ return n>=3?(a*f(n-1)+b*f(n-2))%7:1;}int main(){ long n; while(scanf("%d%d%ld",&a,&b,&n)==3&&(a||b||n)&&a { //int k; if(a if(n%16==0)n=1
2016-11-01 14:49:23
276
原创 杭电HOJ 1004 Let the Balloon Rise
import java.util.Scanner;public class Main{ public static void main(String[]args){ Scanner cin=new Scanner(System.in); while(cin.hasNext()){ int a=cin.nextInt(); if(a==0||a1000)break;
2016-11-01 12:34:34
491
原创 杭电 HDOJ 1008 Elevator
#include#define max 105int a[max],sum;int main(){ int n; while(scanf("%d",&n)==1&&n) { //int tem; sum=0; for(int i=0;i { scanf("%d",a+i); //a[i]=tem; } if(a[0]
2016-11-01 12:31:04
315
原创 UVa489 Hangman Judge的不同实现方法
#include#include#define max 20char cs[max],ys[max];int win,lose;void guess(char c[],char y[]){ int chance=7;//猜测错误的机会 int left=strlen(c);//剩余要猜测的词数 for(int i=0;i { int wrong=1;
2016-10-27 18:52:56
328
原创 引入包名后的java编译命令注意事项!!
package lollo;public class Hello{ public static void main(String[]args){System.out.println("HelloWorld!!!");}}//特别注意!!"javac -d . Hello.java"命令中“-d”“.”“Hello.java”他们中间都有一个空格!!不能忽略,否则编译
2016-09-08 12:11:00
544
WindowTest3_done.zip
2020-01-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人