Android开发笔记

431 阅读1分钟

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();  
}