diff --git a/.idea/checkstyle-idea.xml b/.idea/checkstyle-idea.xml new file mode 100644 index 0000000..be09221 --- /dev/null +++ b/.idea/checkstyle-idea.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 01fb37a..59ad2ed 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,8 @@ + + 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..9726f06 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice01DrawTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice01DrawTextView.java @@ -33,5 +33,6 @@ protected void onDraw(Canvas canvas) { // 使用 drawText() 来绘制文字 // 文字坐标: (50, 100) + canvas.drawText("Hello HenCoder", 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..4adf5c8 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice02StaticLayoutView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice02StaticLayoutView.java @@ -4,6 +4,8 @@ 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; @@ -34,6 +36,10 @@ protected void onDraw(Canvas canvas) { // 使用 StaticLayout 代替 Canvas.drawText() 来绘制文字, // 以绘制出带有换行的文字 - canvas.drawText(text, 50, 100, textPaint); + StaticLayout staticLayout = new StaticLayout(text, textPaint, 600, + Layout.Alignment.ALIGN_NORMAL, 1, 0, true); + canvas.save(); + canvas.translate(50, 100); + staticLayout.draw(canvas); } } 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..24f0419 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice03SetTextSizeView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice03SetTextSizeView.java @@ -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..202d0d8 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice04SetTypefaceView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice04SetTypefaceView.java @@ -40,8 +40,10 @@ protected void onDraw(Canvas canvas) { // 第一处:填入 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..8c86cf7 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice05SetFakeBoldTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice05SetFakeBoldTextView.java @@ -33,6 +33,7 @@ public Practice05SetFakeBoldTextView(Context context, @Nullable AttributeSet att protected void onDraw(Canvas canvas) { super.onDraw(canvas); + paint.setFakeBoldText(true); canvas.drawText(text, 50, 100, paint); } } 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..8aad3a8 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice06SetStrikeThruTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice06SetStrikeThruTextView.java @@ -33,6 +33,7 @@ public Practice06SetStrikeThruTextView(Context context, @Nullable AttributeSet a protected void onDraw(Canvas canvas) { super.onDraw(canvas); + paint.setStrikeThruText(true); canvas.drawText(text, 50, 100, paint); } } 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..7aa7c2d 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice07SetUnderlineTextView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice07SetUnderlineTextView.java @@ -33,6 +33,7 @@ public Practice07SetUnderlineTextView(Context context, @Nullable AttributeSet at protected void onDraw(Canvas canvas) { super.onDraw(canvas); + paint.setUnderlineText(true); canvas.drawText(text, 50, 100, paint); } } 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..4039886 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice08SetTextSkewXView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice08SetTextSkewXView.java @@ -33,6 +33,7 @@ public Practice08SetTextSkewXView(Context context, @Nullable AttributeSet attrs, protected void onDraw(Canvas canvas) { super.onDraw(canvas); + paint.setTextSkewX(-0.5f); canvas.drawText(text, 50, 100, paint); } } 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..f00d3a3 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice09SetTextScaleXView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice09SetTextScaleXView.java @@ -33,6 +33,7 @@ public Practice09SetTextScaleXView(Context context, @Nullable AttributeSet attrs protected void onDraw(Canvas canvas) { super.onDraw(canvas); + paint.setTextScaleX(1.2f); canvas.drawText(text, 50, 100, paint); } } 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..8aa3719 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice11GetFontSpacingView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice11GetFontSpacingView.java @@ -32,7 +32,7 @@ protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 使用 Paint.getFontSpacing() 来获取推荐的行距 - float spacing = 20; + float spacing = paint.getFontSpacing(); canvas.drawText(text, 50, 100, 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..163a36c 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,7 @@ 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); + canvas.drawText(text2, 50 + paint1.measureText(text1), 200, paint2); + canvas.drawText(text3, 50 + paint1.measureText(text1) + paint2.measureText(text2), 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..d38ce8c 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; @@ -44,17 +45,28 @@ protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(50, top, getWidth() - 50, bottom, paint1); - // 使用 Paint.getTextBounds() 计算出文字的显示区域 // 然后计算出文字的绘制位置,从而让文字上下居中 // 这种居中算法的优点是,可以让文字精准地居中,分毫不差 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); + Rect rect1 = new Rect(); + paint2.getTextBounds(text1, 0, text1.length(), rect1); + canvas.drawText(text1, 100, middle - (rect1.top + rect1.bottom) / 2, paint2); + Rect rect2 = new Rect(); + paint2.getTextBounds(text2, 0, text2.length(), rect2); + canvas.drawText(text2, 200, middle - (rect2.top + rect2.bottom) / 2, paint2); + Rect rect3 = new Rect(); + paint2.getTextBounds(text3, 0, text3.length(), rect3); + canvas.drawText(text3, 300, middle - (rect3.top + rect3.bottom) / 2, paint2); + Rect rect4 = new Rect(); + paint2.getTextBounds(text4, 0, text4.length(), rect4); + canvas.drawText(text4, 400, middle - (rect4.top + rect4.bottom) / 2, paint2); + Rect rect5 = new Rect(); + paint2.getTextBounds(text5, 0, text5.length(), rect5); + canvas.drawText(text5, 500, middle - (rect5.top + rect5.bottom) / 2, paint2); + Rect rect6 = new Rect(); + paint2.getTextBounds(text6, 0, text6.length(), rect6); + canvas.drawText(text6, 600, middle - (rect6.top + rect6.bottom) / 2, 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..7c2e378 100644 --- a/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice14GetFontMetricsView.java +++ b/app/src/main/java/com/hencoder/hencoderpracticedraw3/practice/Practice14GetFontMetricsView.java @@ -45,11 +45,12 @@ protected void onDraw(Canvas canvas) { // 这种居中算法的优点是,可以让不同的文字的 baseline 对齐 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); + Paint.FontMetrics fontMetrics = paint2.getFontMetrics(); + canvas.drawText(texts[0], 100, middle - (fontMetrics.ascent + fontMetrics.descent) / 2, paint2); + canvas.drawText(texts[1], 200, middle - (fontMetrics.ascent + fontMetrics.descent) / 2, paint2); + canvas.drawText(texts[2], 300, middle - (fontMetrics.ascent + fontMetrics.descent) / 2, paint2); + canvas.drawText(texts[3], 400, middle - (fontMetrics.ascent + fontMetrics.descent) / 2, paint2); + canvas.drawText(texts[4], 500, middle - (fontMetrics.ascent + fontMetrics.descent) / 2, paint2); + canvas.drawText(texts[5], 600, middle - (fontMetrics.ascent + fontMetrics.descent) / 2, paint2); } }

AltStyle によって変換されたページ (->オリジナル) /