PorterDuffXfermode切割
其他方式有canvas.clipPath(),path.op()
val sc = canvas.saveLayer(0F, 0F, canvas.width.toFloat(), canvas.height.toFloat(),drawPaint) //创建一个新的layer
//画底层
canvas.drawPath(mPath, progressPaint)
...
canvas.drawPath(mPath, progressPaint)
//切割by上层
drawPaint.xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_OUT)
canvas.drawPath(mPath2,drawPaint)
drawPaint.xfermode = null
canvas.restoreToCount(sc)
canvas.drawText baseline
Paint.FontMetricsInt fontMetrics = textPatin.getFontMetricsInt();
baseline = (fontMetrics.bottom + fontMetrics.top) / 2;
...
...
canvas.drawText(text, x, y - baseline, textPatin);
git 上传(fatal: refusing to merge unrelated histories)
git pull origin master --allow-unrelated-histories
git push --set-upstream origin master
BuildConfig
buildConfigField
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildConfigField "String", "BASE_STRING", "\"string content\""
buildConfigField "boolean", "BASE_BOOLEAN", "false"
buildConfigField "int", "BASE_INT", "1"
}
buildTypes {
release {
buildConfigField "String", "BASE_URL", "\"http://www.google.com.hk\""
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
buildConfigField "String", "BASE_URL", "\"http://www.baidu.com\""
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Canvas path
mPaint.setStyle(Paint.Style.STROKE);//画path时paint的样式需要STROKE
dst.reset(); dst.lineTo(0, 0);//截取的path需要lineTo 否则画不出来 boolean segment = pathMeasure.getSegment(start, center + handlePathLength, dst, true);
StaticLayout (anvas.drawText自动换行)
TextPaint textPaint=new TextPaint(Paint.ANTI_ALIAS_FLAG);
textPaint.setColor(Color.RED);
textPaint.setStyle(Paint.Style.FILL);
textPaint.setTextSize(50);
String text="在Android开发中,Canvas.drawText不会换行,即使一个很长的字符串也只会显示一行,超出部分会隐藏在屏幕之外.StaticLayout是android中处理文字的一个工具类,StaticLayout 处理了文字换行的问题";
staticLayout=new StaticLayout(text, textPaint, canvas.getWidth(), Layout.Alignment.ALIGN_NORMAL, 1.0f,0.0f , false);
staticLayout.draw(canvas);
7.0 查询mac www.jianshu.com/p/d0082e8e2…
/**
* 获取手机的MAC地址
* @return
*/
public String getMac(){
String str="";
String macSerial="";
try {
Process pp = Runtime.getRuntime().exec(
"cat /sys/class/net/wlan0/address ");
InputStreamReader ir = new InputStreamReader(pp.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
for (; null != str;) {
str = input.readLine();
if (str != null) {
macSerial = str.trim();// 去空格
break;
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
if (macSerial == null || "".equals(macSerial)) {
try {
return loadFileAsString("/sys/class/net/eth0/address")
.toUpperCase().substring(0, 17);
} catch (Exception e) {
e.printStackTrace();
}
}
return macSerial;
}
public static String loadFileAsString(String fileName) throws Exception {
FileReader reader = new FileReader(fileName);
String text = loadReaderAsString(reader);
reader.close();
return text;
}
public static String loadReaderAsString(Reader reader) throws Exception {
StringBuilder builder = new StringBuilder();
char[] buffer = new char[4096];
int readLength = reader.read(buffer);
while (readLength >= 0) {
builder.append(buffer, 0, readLength);
readLength = reader.read(buffer);
}
return builder.toString();
}