Skip to content

Instantly share code, notes, and snippets.

@linsea
linsea / MainActivity.java
Last active March 3, 2017 02:34
Android Handler send message delayed N really delayed N?
package com.github.linsea.delaytest;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@linsea
linsea / Ticker.java
Last active April 12, 2017 01:33
任务运行计时工具
package com.github.linsea.autostopwatch;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@linsea
linsea / HandleDump.java
Created June 17, 2017 07:42
Looper Dump Demo
package com.github.linsea.exceptiontest;
//import android.support.v7.app.AppCompatActivity;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.util.LogPrinter;
import android.view.View;

C/C++ 语言中的 static 关键字总结

C 中的 static 关键字

1 修饰函数

表示函数只在定义它的源文件(准确地说是“translation unit翻译单元”)可见, 作用域仅限本源文件, 在其他源文件中不可见, 相当于 Java 类的 private 函数, 只能本类访问, 其他类不可访问. 可见它有一定面向对象中"封装"的作用.

2 修饰变量

修饰变量后, 变量即为静态变量, 静态变量存放在静态存储区,如果不手动初始化, 则它在编译期被自动初始化为0或空字符, 另外它具有整个程序运行期的持久性, 因为在静态存储区.

import android.util.Log;
import com.yy.mobile.config.BasicConfig;
import java.io.PrintWriter;
import java.io.StringWriter;
public class AndroidLog {
public static final String GLOBAL_TAG = "GOD";
private static final int MAX_LOG_LENGTH = 4000;
private static final String SUFFIX = ".java";
private static final int STACK_TRACE_INDEX = 5;
@linsea
linsea / Loga.kts
Created August 10, 2018 09:34
Log分析统计脚本
import java.io.File
import java.lang.System.exit
import java.text.SimpleDateFormat
import java.util.*
if (args.size != 3) {
println("使用方法: kotlinc -script logst.kts <input_log_file_path> <output_file_path> <regex_pattern>")
println("注意 <regex_pattern> 中的正则使用'|'分隔重点LOG行, 第一个和最后一个必须为一次统计的开始行和结束行正则, 否则无法分辨一次统计的起始点与终止点")
exit(1)
}
@linsea
linsea / FullWidthDialog.txt
Last active June 26, 2019 03:26
full width dialog
1. https://stackoverflow.com/questions/28513616/android-get-full-width-for-custom-dialog
2. 还有一个技巧是在 DialogFragmnet 的 onStart() 方法里设置 window 的属性, 如下的答案有提到:
https://stackoverflow.com/questions/2306503/how-to-make-an-alert-dialog-fill-90-of-screen-size
3. 需求是屏幕最底下弹出一个包含 EditText 的 Dialog, 并且宽度占满屏幕的宽度, 点击输入框后, 输入法把 Dialog 顶上来. 实现如下.
i) Dialog 的内容布局使用 android:layout_gravity="bottom" 属性, 因为系统给 dialog 的父布局是一个 FrameLayout, 这样内容子布局就对齐到了屏幕的底部.
ii) 创建 Dialog:

Skia 2D 基础

https://skia.org/user/api/

Skia 是围绕 SkCanvas 对象组织的。它是“绘制”方法的宿主对象,如它有 drawRectdrawPathdrawText 等绘制方法。这些方法都需要传入两个参数:正在绘制的图元(SkRectSkPath等)和颜色/样式属性(SkPaint)。

canvas->drawRect(rect, paint);

画笔 paint 对象指示图元如何被绘制(如上例中,指的是矩形):矩形是什么颜色,是填充(filled)或描边(stroked)的,应该如何与先前绘制的颜色融合(blend)。

Android Paint 详解

Paint 基础

设置颜色

paint.setColor(int color)
paint.setARGB(int a, int r, int g, int b)

然后使用Paint 来绘制基本图形, 如 canvas.drawRect() , canvas.drawLine() , canvas.drawText() .