diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 0000000..cc9e5a4 Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 1f2af51..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml deleted file mode 100644 index 3efe9d6..0000000 --- a/.idea/markdown-navigator.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/markdown-navigator/profiles_settings.xml b/.idea/markdown-navigator/profiles_settings.xml deleted file mode 100644 index 57927c5..0000000 --- a/.idea/markdown-navigator/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4716600..dc34569 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,18 +1,16 @@ - - - @@ -27,36 +25,10 @@ - - - - - - - - - - - + - - - - - 1.8 - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 01fb37a..1e82b42 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5756266..7911768 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion "25.0.3" + compileSdkVersion 27 + buildToolsVersion "27.0.3" defaultConfig { applicationId "com.hencoder.hencoderpracticedraw3" minSdkVersion 18 @@ -20,13 +20,13 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support.constraint:constraint-layout:1.0.2' - compile 'com.android.support:support-core-ui:25.3.1' - compile 'com.android.support:design:25.3.1' - testCompile 'junit:junit:4.12' + implementation 'com.android.support:appcompat-v7:27.1.0' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'com.android.support:support-core-ui:27.1.0' + implementation 'com.android.support:design:27.1.0' + testImplementation 'junit:junit:4.12' } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice01DrawTextView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice01DrawTextView.java index c74f5f6..e5c78cd 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice01DrawTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice01DrawTextView.java @@ -9,7 +9,7 @@ public class Practice01DrawTextView extends View { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - String text = "Hello HenCoder"; + String text = "Hello TinyCoder"; public Practice01DrawTextView(Context context) { super(context); @@ -33,5 +33,6 @@ protected void onDraw(Canvas canvas) { // 使用 drawText() 来绘制文字 // 文字坐标: (50, 100) + canvas.drawText(text,0,text.length(),50,100,paint); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice02StaticLayoutView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice02StaticLayoutView.java index 0ea2ac0..65d2324 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice02StaticLayoutView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice02StaticLayoutView.java @@ -4,13 +4,15 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.Nullable; +import android.text.Layout; +import android.text.StaticLayout; import android.text.TextPaint; import android.util.AttributeSet; import android.view.View; public class Practice02StaticLayoutView extends View { TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); - String text = "Hello\nHenCoder"; + String text = "Hello\nTinyCoder"; public Practice02StaticLayoutView(Context context) { super(context); @@ -32,8 +34,12 @@ public Practice02StaticLayoutView(Context context, @Nullable AttributeSet attrs, protected void onDraw(Canvas canvas) { super.onDraw(canvas); + //canvas.drawText(text, 50, 100, textPaint); // 使用 StaticLayout 代替 Canvas.drawText() 来绘制文字, // 以绘制出带有换行的文字 - canvas.drawText(text, 50, 100, textPaint); + canvas.save(); + StaticLayout staticLayout = new StaticLayout(text,textPaint,getWidth(), Layout.Alignment.ALIGN_CENTER,1,0,true); + staticLayout.draw(canvas); + canvas.restore(); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice03SetTextSizeView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice03SetTextSizeView.java index 27b93d7..b787bca 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice03SetTextSizeView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice03SetTextSizeView.java @@ -9,7 +9,7 @@ public class Practice03SetTextSizeView extends View { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - String text = "Hello HenCoder"; + String text = "Hello TinyCoder"; public Practice03SetTextSizeView(Context context) { super(context); @@ -32,18 +32,22 @@ protected void onDraw(Canvas canvas) { // 使用 paint.setTextSize() 来设置不同大小的文字 // 第一处:文字大小 16 + paint.setTextSize(16); canvas.drawText(text, 50, y, paint); y += 30; // 第一处:文字大小 24 + paint.setTextSize(24); canvas.drawText(text, 50, y, paint); y += 55; // 第一处:文字大小 48 + paint.setTextSize(48); canvas.drawText(text, 50, y, paint); y += 80; // 第一处:文字大小 72 + paint.setTextSize(72); canvas.drawText(text, 50, y, paint); } } \ No newline at end of file diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice04SetTypefaceView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice04SetTypefaceView.java index 9b499f6..92fb269 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice04SetTypefaceView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice04SetTypefaceView.java @@ -10,7 +10,7 @@ public class Practice04SetTypefaceView extends View { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - String text = "Hello HenCoder"; + String text = "Hello TinyCoder"; Typeface typeface; public Practice04SetTypefaceView(Context context) { @@ -38,10 +38,13 @@ protected void onDraw(Canvas canvas) { // 使用 Paint.setTypeface() 来设置不同的字体 // 第一处:填入 null 来设置默认字体 + paint.setTypeface(null); canvas.drawText(text, 50, 100, paint); // 第二处:填入 Typeface.SERIF 来设置衬线字体(宋体) + paint.setTypeface(Typeface.SERIF); canvas.drawText(text, 50, 200, paint); // 第三处:填入 typeface 对象来使用 assets 目录下的 "Satisfy-Regular.ttf" 文件 + paint.setTypeface(Typeface.createFromAsset(getContext().getAssets(),"Satisfy-Regular.ttf")); canvas.drawText(text, 50, 300, paint); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice05SetFakeBoldTextView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice05SetFakeBoldTextView.java index 944678e..12e4540 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice05SetFakeBoldTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice05SetFakeBoldTextView.java @@ -27,6 +27,7 @@ public Practice05SetFakeBoldTextView(Context context, @Nullable AttributeSet att paint.setTextSize(60); // 使用 Paint.setFakeBoldText() 来加粗文字 + paint.setFakeBoldText(true); } @Override diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice06SetStrikeThruTextView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice06SetStrikeThruTextView.java index 48a6297..48ebfc3 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice06SetStrikeThruTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice06SetStrikeThruTextView.java @@ -27,6 +27,7 @@ public Practice06SetStrikeThruTextView(Context context, @Nullable AttributeSet a paint.setTextSize(60); // 使用 Paint.setStrikeThruText() 来设置删除线 + paint.setStrikeThruText(true); } @Override diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice07SetUnderlineTextView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice07SetUnderlineTextView.java index 003ec6c..07f7373 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice07SetUnderlineTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice07SetUnderlineTextView.java @@ -27,6 +27,7 @@ public Practice07SetUnderlineTextView(Context context, @Nullable AttributeSet at paint.setTextSize(60); // 使用 Paint.setUnderlineText() 来设置下划线 + paint.setUnderlineText(true); } @Override diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice08SetTextSkewXView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice08SetTextSkewXView.java index c0a398c..bb6b5b0 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice08SetTextSkewXView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice08SetTextSkewXView.java @@ -27,6 +27,7 @@ public Practice08SetTextSkewXView(Context context, @Nullable AttributeSet attrs, paint.setTextSize(60); // 使用 Paint.setTextSkewX() 来让文字倾斜 + paint.setTextSkewX(0.3f); } @Override diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice09SetTextScaleXView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice09SetTextScaleXView.java index e0da491..b3e3e9b 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice09SetTextScaleXView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice09SetTextScaleXView.java @@ -27,6 +27,7 @@ public Practice09SetTextScaleXView(Context context, @Nullable AttributeSet attrs paint.setTextSize(60); // 使用 Paint.setTextScaleX() 来改变文字宽度 + paint.setTextScaleX(1.6f); } @Override diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice10SetTextAlignView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice10SetTextAlignView.java index 6bbb7ac..eb80d4a 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice10SetTextAlignView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice10SetTextAlignView.java @@ -36,12 +36,15 @@ protected void onDraw(Canvas canvas) { // 使用 Paint.setTextAlign() 来调整文字对齐方式 // 第一处:使用 Paint.Align.LEFT + paint.setTextAlign(Paint.Align.LEFT); canvas.drawText(text, getWidth() / 2, 100, paint); // 第二处:使用 Paint.Align.CENTER + paint.setTextAlign(Paint.Align.CENTER); canvas.drawText(text, getWidth() / 2, 200, paint); // 第三处:使用 Paint.Align.RIGHT + paint.setTextAlign(Paint.Align.RIGHT); canvas.drawText(text, getWidth() / 2, 300, paint); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice11GetFontSpacingView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice11GetFontSpacingView.java index b5723f1..1f58ce8 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice11GetFontSpacingView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice11GetFontSpacingView.java @@ -9,7 +9,7 @@ public class Practice11GetFontSpacingView extends View { Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); - String text = "Hello HenCoder"; + String text = "Hello TinyCoder"; public Practice11GetFontSpacingView(Context context) { super(context); @@ -36,8 +36,10 @@ protected void onDraw(Canvas canvas) { canvas.drawText(text, 50, 100, paint); + spacing = paint.getFontSpacing(); canvas.drawText(text, 50, 100 + spacing, paint); + spacing = paint.getFontSpacing(); canvas.drawText(text, 50, 100 + spacing * 2, paint); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice12MeasureTextView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice12MeasureTextView.java index d3b271a..e5b7da6 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice12MeasureTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice12MeasureTextView.java @@ -40,7 +40,9 @@ protected void onDraw(Canvas canvas) { // 使用 Paint.measureText 测量出文字宽度,让文字可以相邻绘制 canvas.drawText(text1, 50, 200, paint1); - canvas.drawText(text2, 50 + 100, 200, paint2); - canvas.drawText(text3, 50 + 200, 200, paint1); + float off1 = paint1.measureText(text1); + canvas.drawText(text2, 50 + off1, 200, paint2); + float off2 = paint2.measureText(text2); + canvas.drawText(text3, 50 + off1 + off2, 200, paint1); } } diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice13GetTextBoundsView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice13GetTextBoundsView.java index f88cac7..cc01be7 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice13GetTextBoundsView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice13GetTextBoundsView.java @@ -4,6 +4,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.graphics.Rect; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.View; @@ -13,8 +14,8 @@ public class Practice13GetTextBoundsView extends View { Paint paint2 = new Paint(Paint.ANTI_ALIAS_FLAG); String text1 = "A"; String text2 = "a"; - String text3 = "J"; - String text4 = "j"; + String text3 = "G"; + String text4 = "g"; String text5 = "Â"; String text6 = "â"; int top = 200; @@ -48,13 +49,25 @@ protected void onDraw(Canvas canvas) { // 使用 Paint.getTextBounds() 计算出文字的显示区域 // 然后计算出文字的绘制位置,从而让文字上下居中 // 这种居中算法的优点是,可以让文字精准地居中,分毫不差 - + Rect bound = new Rect(); int middle = (top + bottom) / 2; - canvas.drawText(text1, 100, middle, paint2); - canvas.drawText(text2, 200, middle, paint2); - canvas.drawText(text3, 300, middle, paint2); - canvas.drawText(text4, 400, middle, paint2); - canvas.drawText(text5, 500, middle, paint2); - canvas.drawText(text6, 600, middle, paint2); + paint2.getTextBounds(text1, 0, 1, bound); + int middleOff1 = -(bound.top + bound.bottom) / 2; + canvas.drawText(text1, 100, middle + middleOff1, paint2); + paint2.getTextBounds(text2, 0, 1, bound); + int middleOff2 = -(bound.top + bound.bottom) / 2; + canvas.drawText(text2, 200, middle + middleOff2, paint2); + paint2.getTextBounds(text3, 0, 1, bound); + int middleOff3 = -(bound.top + bound.bottom) / 2; + canvas.drawText(text3, 300, middle + middleOff3, paint2); + paint2.getTextBounds(text4, 0, 1, bound); + int middleOff4 = -(bound.top + bound.bottom) / 2; + canvas.drawText(text4, 400, middle + middleOff4, paint2); + paint2.getTextBounds(text5, 0, 1, bound); + int middleOff5 = -(bound.top + bound.bottom) / 2; + canvas.drawText(text5, 500, middle + middleOff5, paint2); + paint2.getTextBounds(text6, 0, 1, bound); + int middleOff6 = -(bound.top + bound.bottom) / 2; + canvas.drawText(text6, 600, middle + middleOff6, paint2); } } \ No newline at end of file diff --git a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice14GetFontMetricsView.java b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice14GetFontMetricsView.java index 7d948c2..18ba89a 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice14GetFontMetricsView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice14GetFontMetricsView.java @@ -44,12 +44,15 @@ protected void onDraw(Canvas canvas) { // 然后计算出文字的绘制位置,从而让文字上下居中 // 这种居中算法的优点是,可以让不同的文字的 baseline 对齐 + Paint.FontMetrics metrics = new Paint.FontMetrics(); + paint2.getFontMetrics(metrics); + int off = (int) - (metrics.ascent + metrics.descent) / 2; int middle = (top + bottom) / 2; - canvas.drawText(texts[0], 100, middle, paint2); - canvas.drawText(texts[1], 200, middle, paint2); - canvas.drawText(texts[2], 300, middle, paint2); - canvas.drawText(texts[3], 400, middle, paint2); - canvas.drawText(texts[4], 500, middle, paint2); - canvas.drawText(texts[5], 600, middle, paint2); + canvas.drawText(texts[0], 100, middle + off, paint2); + canvas.drawText(texts[1], 200, middle + off, paint2); + canvas.drawText(texts[2], 300, middle + off, paint2); + canvas.drawText(texts[3], 400, middle + off, paint2); + canvas.drawText(texts[4], 500, middle + off, paint2); + canvas.drawText(texts[5], 600, middle + off, paint2); } } diff --git a/build.gradle b/build.gradle index c2eea8e..7a9f87a 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.1.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle.properties b/gradle.properties index aac7c9b..e602bf4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m +#org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 03d462a..784d864 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip