diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 004631e..15162e4 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 1a0d6f6..8cb0f21 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -16,8 +16,7 @@
-
-
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b0c7b20..e0d5b93 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -29,7 +29,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 6387a1a..114b26b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -49,7 +49,8 @@ dependencies {
implementation project(':code5_velocitytracker_scroller')
implementation project(':code6_flowlayout')
implementation project(':code7_svg')
- implementation project(':code8_canvas')
+ implementation project(':code8_canvas_clip')
+// implementation project(':code8_canvas')
// implementation project(':code9_paint')
// implementation project(':code_x1_drawable_gravity')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2e567f1..702aead 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,7 +8,7 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
+
diff --git a/app/src/main/java/com/zinc/ui2018/MainActivity.java b/app/src/main/java/com/zinc/ui2018/MainActivity.java
index ad1b991..f6d06f0 100644
--- a/app/src/main/java/com/zinc/ui2018/MainActivity.java
+++ b/app/src/main/java/com/zinc/ui2018/MainActivity.java
@@ -19,6 +19,7 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.tv_code5_scroller_velocityTracker).setOnClickListener(this);
findViewById(R.id.tv_code6_draw_flow).setOnClickListener(this);
findViewById(R.id.tv_code7_svg).setOnClickListener(this);
+ findViewById(R.id.tv_code8_canvas_clip).setOnClickListener(this);
}
@Override
@@ -45,6 +46,9 @@ public void onClick(View view) {
case R.id.tv_code7_svg:
startActivity(new Intent(this, com.zinc.svg.ClientActivity.class));
break;
+ case R.id.tv_code8_canvas_clip:
+ startActivity(new Intent(this, com.zinc.code8_canvas_clip.activity.ClientActivity.class));
+ break;
}
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 612a387..38753e5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -48,6 +48,11 @@
style="@style/textview_button"
android:text="svg 使用" />
+
+
diff --git a/code8_canvas/.gitignore b/code8_canvas_clip/.gitignore
similarity index 100%
rename from code8_canvas/.gitignore
rename to code8_canvas_clip/.gitignore
diff --git a/code8_canvas_clip/build.gradle b/code8_canvas_clip/build.gradle
new file mode 100644
index 0000000..6f5aeea
--- /dev/null
+++ b/code8_canvas_clip/build.gradle
@@ -0,0 +1,34 @@
+apply plugin: 'com.android.library'
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+
+ defaultConfig {
+
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode rootProject.ext.versionCode
+ versionName rootProject.ext.versionName
+
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+}
+
+dependencies {
+ def lib = rootProject.ext
+
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ implementation "com.android.support:appcompat-v7:$lib.appcompatV7"
+
+ implementation project(":lib_base")
+}
diff --git a/code8_canvas/proguard-rules.pro b/code8_canvas_clip/proguard-rules.pro
similarity index 100%
rename from code8_canvas/proguard-rules.pro
rename to code8_canvas_clip/proguard-rules.pro
diff --git a/code8_canvas_clip/src/main/AndroidManifest.xml b/code8_canvas_clip/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..a2dc8ec
--- /dev/null
+++ b/code8_canvas_clip/src/main/AndroidManifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClientActivity.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClientActivity.java
new file mode 100644
index 0000000..c8d4dc1
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClientActivity.java
@@ -0,0 +1,40 @@
+package com.zinc.code8_canvas_clip.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+
+import com.zinc.code8_canvas_clip.R;
+
+/**
+ * author : zinc
+ * time : 2019/4/26 下午12:53
+ * desc :
+ * version :
+ */
+public class ClientActivity extends Activity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_canvas_clip_client);
+ }
+
+ public void onHeart(View view) {
+ startActivity(new Intent(this, HeartActivity.class));
+ }
+
+ public void onClip(View view) {
+ startActivity(new Intent(this, ClipActivity.class));
+ }
+
+ public void onClipOut(View view) {
+ startActivity(new Intent(this, ClipOutActivity.class));
+ }
+
+ public void onClipPathWithOp(View view) {
+ startActivity(new Intent(this, ClipOpListActivity.class));
+ }
+}
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipActivity.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipActivity.java
new file mode 100644
index 0000000..b3a52c5
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipActivity.java
@@ -0,0 +1,22 @@
+package com.zinc.code8_canvas_clip.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+import com.zinc.code8_canvas_clip.widget.ClipPathView;
+
+/**
+ * author : zinc
+ * time : 2019/4/27 上午10:10
+ * desc :
+ * version :
+ */
+public class ClipActivity extends Activity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(new ClipPathView(this));
+ }
+}
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOpContentActivity.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOpContentActivity.java
new file mode 100644
index 0000000..9577071
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOpContentActivity.java
@@ -0,0 +1,31 @@
+package com.zinc.code8_canvas_clip.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+import com.zinc.code8_canvas_clip.widget.ClipOpView;
+
+/**
+ * author : zinc
+ * time : 2019/4/26 下午12:35
+ * desc :
+ * version :
+ */
+public class ClipOpContentActivity extends Activity {
+
+ public static final String CLIP = "CLIP";
+
+ private ClipOpView mClipOpView;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mClipOpView = new ClipOpView(this);
+ setContentView(mClipOpView);
+
+ String clip = getIntent().getStringExtra(CLIP);
+ mClipOpView.setType(clip);
+
+ }
+}
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOpListActivity.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOpListActivity.java
new file mode 100644
index 0000000..0f0c274
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOpListActivity.java
@@ -0,0 +1,57 @@
+package com.zinc.code8_canvas_clip.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+
+import com.zinc.code8_canvas_clip.widget.ClipOpView;
+import com.zinc.code8_canvas_clip.R;
+
+/**
+ * author : zinc
+ * time : 2019/4/26 下午12:36
+ * desc :
+ * version :
+ */
+public class ClipOpListActivity extends Activity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_clip_list);
+ }
+
+ public void onDifference(View view) {
+ goToClipView(ClipOpView.DIFFERENCE);
+ }
+
+ public void onIntersect(View view) {
+ goToClipView(ClipOpView.INTERSECT);
+ }
+
+ public void onUnion(View view) {
+ goToClipView(ClipOpView.UNION);
+ }
+
+ public void onXor(View view) {
+ goToClipView(ClipOpView.XOR);
+ }
+
+ public void onReverseDifference(View view) {
+ goToClipView(ClipOpView.REVERSE_DIFFERENCE);
+ }
+
+ public void onReplace(View view) {
+ goToClipView(ClipOpView.REPLACE);
+ }
+
+ private void goToClipView(String type) {
+ Intent intent = new Intent(this, ClipOpContentActivity.class);
+ intent.putExtra(ClipOpContentActivity.CLIP, type);
+
+ startActivity(intent);
+ }
+
+}
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOutActivity.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOutActivity.java
new file mode 100644
index 0000000..695c149
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/ClipOutActivity.java
@@ -0,0 +1,22 @@
+package com.zinc.code8_canvas_clip.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+import com.zinc.code8_canvas_clip.widget.ClipOutPathView;
+
+/**
+ * author : zinc
+ * time : 2019/4/27 上午10:10
+ * desc :
+ * version :
+ */
+public class ClipOutActivity extends Activity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(new ClipOutPathView(this));
+ }
+}
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/HeartActivity.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/HeartActivity.java
new file mode 100644
index 0000000..ceda9e1
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/activity/HeartActivity.java
@@ -0,0 +1,38 @@
+package com.zinc.code8_canvas_clip.activity;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.widget.TextView;
+
+import com.zinc.code8_canvas_clip.widget.HeartView;
+import com.zinc.code8_canvas_clip.R;
+
+/**
+ * author : zinc
+ * time : 2019/4/21 上午9:29
+ * desc :
+ * version :
+ */
+public class HeartActivity extends Activity {
+
+ private HeartView heartView;
+ private TextView tvStart;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_canvas_heart);
+
+ heartView = findViewById(R.id.heart_view);
+ tvStart = findViewById(R.id.tv_start);
+
+ tvStart.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ heartView.start();
+ }
+ });
+ }
+}
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipOpView.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipOpView.java
new file mode 100644
index 0000000..09eb46e
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipOpView.java
@@ -0,0 +1,224 @@
+package com.zinc.code8_canvas_clip.widget;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PointF;
+import android.graphics.RectF;
+import android.graphics.Region;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.lib_base.BaseView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * author : zinc
+ * time : 2019/4/26 上午12:22
+ * desc :
+ * version :
+ */
+public class ClipOpView extends BaseView {
+
+ // 是A形状中不同于B的部分显示出来
+ public static final String DIFFERENCE = "DIFFERENCE";
+ // 是A和B交集的形状
+ public static final String INTERSECT = "INTERSECT";
+ // 是A和B的全集
+ public static final String UNION = "UNION";
+ // 是全集形状减去交集形状之后的部分
+ public static final String XOR = "XOR";
+ // 是B形状中不同于A的部分显示出来,这是没有设置时候默认的
+ public static final String REVERSE_DIFFERENCE = "REVERSE_DIFFERENCE";
+ // 是只显示B的形状
+ public static final String REPLACE = "REPLACE";
+
+ private Path mHeartPath;
+ private Path mCirclePath;
+
+ private RectF mHeartRect;
+
+ private int mHeartAlphaColor;
+ private int mCircleAlphaColor;
+ private int mBackgroundColor;
+ private int mTextColor;
+
+ private int mTextSize;
+
+ private Paint mPaint;
+
+ private String mType;
+
+ public ClipOpView(Context context) {
+ this(context, null);
+ }
+
+ public ClipOpView(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ClipOpView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(context);
+ }
+
+ public void setType(String type) {
+ this.mType = type;
+ postInvalidate();
+ }
+
+ @Override
+ protected void init(Context context) {
+
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+
+ mHeartAlphaColor = Color.parseColor("#aabe97dc");
+ mCircleAlphaColor = Color.parseColor("#aa226089");
+ mBackgroundColor = Color.parseColor("#df0e62");
+ mTextColor = Color.parseColor("#f54291");
+
+ mTextSize = dpToPx(14);
+
+ mHeartPath = new Path();
+ createHeart(mHeartPath);
+
+ mHeartRect = new RectF();
+ mHeartPath.computeBounds(mHeartRect, true);
+
+ mCirclePath = new Path();
+ mCirclePath.addCircle(0,
+ mHeartRect.bottom,
+ mHeartRect.width() / 2,
+ Path.Direction.CCW);
+
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ drawCoordinate(canvas);
+
+ canvasText(canvas);
+
+ drawSourcePic(canvas);
+
+ drawClip(canvas);
+ }
+
+ private void canvasText(Canvas canvas) {
+ canvas.save();
+
+ mPaint.setColor(mTextColor);
+ mPaint.setTextSize(mTextSize);
+ mPaint.setTextAlign(Paint.Align.CENTER);
+ canvas.drawText(mType, getWidth() / 2, mTextSize * 2, mPaint);
+
+ canvas.restore();
+ }
+
+ private void drawSourcePic(Canvas canvas) {
+ canvas.save();
+
+ mPaint.setColor(mHeartAlphaColor);
+ canvas.translate(mHeartRect.width() / 2 + 50,
+ mHeartRect.height() / 2 + 50);
+ canvas.drawPath(mHeartPath, mPaint);
+
+ mPaint.setColor(mCircleAlphaColor);
+ canvas.translate(mHeartRect.width() + 50, -mHeartRect.bottom + 50);
+ canvas.drawPath(mCirclePath, mPaint);
+
+ canvas.restore();
+ }
+
+ private void drawClip(Canvas canvas) {
+ canvas.translate(getWidth() / 2, getHeight() / 2);
+
+ mPaint.setStyle(Paint.Style.FILL);
+
+ mPaint.setColor(mHeartAlphaColor);
+ canvas.drawPath(mHeartPath, mPaint);
+
+ mPaint.setColor(mCircleAlphaColor);
+ canvas.drawPath(mCirclePath, mPaint);
+
+ canvas.clipPath(mHeartPath);
+
+ Region.Op op;
+ switch (mType) {
+ case DIFFERENCE:
+ op = Region.Op.DIFFERENCE;
+ break;
+ // 是A和B交集的形状
+ case INTERSECT:
+ op = Region.Op.INTERSECT;
+ break;
+ // 是A和B的全集
+ case UNION:
+ op = Region.Op.UNION;
+ break;
+ // 是全集形状减去交集形状之后的部分
+ case XOR:
+ op = Region.Op.XOR;
+ break;
+ // 是B形状中不同于A的部分显示出来,这是没有设置时候默认的
+ case REVERSE_DIFFERENCE:
+ op = Region.Op.REVERSE_DIFFERENCE;
+ break;
+ // 是只显示B的形状
+ case REPLACE:
+ op = Region.Op.REPLACE;
+ break;
+ default:
+ op = Region.Op.INTERSECT;
+ break;
+ }
+ canvas.clipPath(mCirclePath, op);
+ canvas.drawColor(mBackgroundColor);
+ }
+
+ /**
+ * 构建心形
+ */
+ private void createHeart(Path path) {
+ List pointList = new ArrayList<>();
+ pointList.add(new PointF(0, -76));
+ pointList.add(new PointF(100, -206));
+ pointList.add(new PointF(224, -122));
+ pointList.add(new PointF(224, -24));
+ pointList.add(new PointF(224, 74));
+ pointList.add(new PointF(102, 180));
+ pointList.add(new PointF(0, 258));
+ pointList.add(new PointF(-102, 180));
+ pointList.add(new PointF(-224, 74));
+ pointList.add(new PointF(-224, -24));
+ pointList.add(new PointF(-224, -122));
+ pointList.add(new PointF(-100, -206));
+
+ path.reset();
+ for (int i = 0; i < 4; i++) {
+ if (i == 0) {
+ path.moveTo(pointList.get(i * 3).x, pointList.get(i * 3).y);
+ } else {
+ path.lineTo(pointList.get(i * 3).x, pointList.get(i * 3).y);
+ }
+
+ int endPointIndex;
+ if (i == 3) {
+ endPointIndex = 0;
+ } else {
+ endPointIndex = i * 3 + 3;
+ }
+
+ path.cubicTo(pointList.get(i * 3 + 1).x, pointList.get(i * 3 + 1).y,
+ pointList.get(i * 3 + 2).x, pointList.get(i * 3 + 2).y,
+ pointList.get(endPointIndex).x, pointList.get(endPointIndex).y);
+ }
+ path.close();
+ }
+
+}
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/ClipView.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipOutPathView.java
similarity index 65%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/ClipView.java
rename to code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipOutPathView.java
index c6c4a8f..2cc83aa 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/ClipView.java
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipOutPathView.java
@@ -1,25 +1,19 @@
-package com.zinc.canvas.widget.draw;
+package com.zinc.code8_canvas_clip.widget;
-import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Region;
import android.os.Build;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
-import android.util.Log;
import android.view.View;
-import android.view.animation.LinearInterpolator;
-import com.zinc.canvas.R;
+import com.zinc.code8_canvas_clip.R;
import java.util.ArrayList;
import java.util.List;
@@ -30,30 +24,22 @@
* desc :
* version :
*/
-public class ClipView extends View {
-
- private static final int DEGREE_COUNT = 12;
+public class ClipOutPathView extends View {
private Paint mPaint;
- private RectF mRectF;
- private Rect mRect;
private int mBgColor;
-
- private Rect mClipRect;
- private RectF mPathRect;
-
private Path mPath;
- public ClipView(Context context) {
+ public ClipOutPathView(Context context) {
this(context, null);
}
- public ClipView(Context context, @Nullable AttributeSet attrs) {
+ public ClipOutPathView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
- public ClipView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ public ClipOutPathView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
@@ -64,14 +50,9 @@ private void init(Context context) {
mBgColor = ContextCompat.getColor(context, R.color.canvas_red_color);
- mRectF = new RectF();
- mRect = new Rect();
mPath = new Path();
createHeart(mPath);
- mClipRect = new Rect();
- mPathRect = new RectF();
-
}
@Override
@@ -80,33 +61,12 @@ protected void onDraw(Canvas canvas) {
canvas.translate(getWidth() / 2, getHeight() / 2);
- canvas.clipPath(mPath, Region.Op.DIFFERENCE);
-// canvas.clipPath(mPath);
-
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-// canvas.clipOutRect(mRect);
-// }
-
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-// canvas.clipOutRect(mRectF);
-// }
-
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-// canvas.clipOutRect(0, 0, 100, 100);
-// }
-
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-// canvas.clipOutRect(0f, 0f, 100f, 100f);
-// }
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ canvas.clipOutPath(mPath);
+ }
canvas.drawColor(mBgColor);
- canvas.getClipBounds(mClipRect);
-
- mPath.computeBounds(mPathRect, false);
- Log.i("ClipView", "clipRect: " + mClipRect.toString() + "\n"
- + "pathRect: " + mPathRect.toString());
-
}
/**
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipPathView.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipPathView.java
new file mode 100644
index 0000000..02e314d
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/ClipPathView.java
@@ -0,0 +1,115 @@
+package com.zinc.code8_canvas_clip.widget;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PointF;
+import android.support.annotation.Nullable;
+import android.support.v4.content.ContextCompat;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.view.View;
+
+import com.zinc.code8_canvas_clip.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * author : zinc
+ * time : 2019/4/21 下午8:35
+ * desc :
+ * version :
+ */
+public class ClipPathView extends View {
+
+ private Paint mPaint;
+
+ private int mBgColor;
+
+ private Path mPath;
+
+ public ClipPathView(Context context) {
+ this(context, null);
+ }
+
+ public ClipPathView(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ClipPathView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(context);
+ }
+
+ private void init(Context context) {
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+
+ mBgColor = ContextCompat.getColor(context, R.color.canvas_red_color);
+
+ mPath = new Path();
+ createHeart(mPath);
+
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ canvas.translate(getWidth() / 2, getHeight() / 2);
+
+ canvas.clipPath(mPath);
+
+ canvas.drawColor(mBgColor);
+
+ }
+
+ /**
+ * 构建心形
+ */
+ private void createHeart(Path path) {
+ List pointList = new ArrayList<>();
+ pointList.add(new PointF(0, dpToPx(-38)));
+ pointList.add(new PointF(dpToPx(50), dpToPx(-103)));
+ pointList.add(new PointF(dpToPx(112), dpToPx(-61)));
+ pointList.add(new PointF(dpToPx(112), dpToPx(-12)));
+ pointList.add(new PointF(dpToPx(112), dpToPx(37)));
+ pointList.add(new PointF(dpToPx(51), dpToPx(90)));
+ pointList.add(new PointF(0, dpToPx(129)));
+ pointList.add(new PointF(dpToPx(-51), dpToPx(90)));
+ pointList.add(new PointF(dpToPx(-112), dpToPx(37)));
+ pointList.add(new PointF(dpToPx(-112), dpToPx(-12)));
+ pointList.add(new PointF(dpToPx(-112), dpToPx(-61)));
+ pointList.add(new PointF(dpToPx(-50), dpToPx(-103)));
+
+ path.reset();
+ for (int i = 0; i < 4; i++) {
+ if (i == 0) {
+ path.moveTo(pointList.get(i * 3).x, pointList.get(i * 3).y);
+ } else {
+ path.lineTo(pointList.get(i * 3).x, pointList.get(i * 3).y);
+ }
+
+ int endPointIndex;
+ if (i == 3) {
+ endPointIndex = 0;
+ } else {
+ endPointIndex = i * 3 + 3;
+ }
+
+ path.cubicTo(pointList.get(i * 3 + 1).x, pointList.get(i * 3 + 1).y,
+ pointList.get(i * 3 + 2).x, pointList.get(i * 3 + 2).y,
+ pointList.get(endPointIndex).x, pointList.get(endPointIndex).y);
+ }
+ path.close();
+ }
+
+ protected int dpToPx(float dpValue) {
+ DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
+ return (int) (dpValue * metrics.density + 0.5f);
+ }
+
+}
diff --git a/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/HeartView.java b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/HeartView.java
new file mode 100644
index 0000000..ee2d2fd
--- /dev/null
+++ b/code8_canvas_clip/src/main/java/com/zinc/code8_canvas_clip/widget/HeartView.java
@@ -0,0 +1,348 @@
+package com.zinc.code8_canvas_clip.widget;
+
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PointF;
+import android.graphics.RectF;
+import android.graphics.Typeface;
+import android.support.annotation.Nullable;
+import android.support.v4.content.ContextCompat;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+
+import com.zinc.code8_canvas_clip.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * author : zinc
+ * time : 2019/4/20 上午10:05
+ * desc :
+ * version :
+ */
+public class HeartView extends View {
+
+ private static final String SHOW_CONTENT = "猛猛的小盆友";
+
+ private Paint mPaint;
+
+ private Path mHeartPath;
+
+ private RectF mHeartRect;
+
+ private int mTextSize;
+
+ private float mCurPos;
+
+ private ObjectAnimator mUpAnim;
+
+ private ValueAnimator mBezierAnim;
+
+ private AnimatorSet mAnimSet;
+
+ private int mTopBgColor;
+ private int mBottomBgColor;
+
+ // 当前的偏移量
+ private int mCurOffset = 0;
+ // 每次的偏移量
+ private int mOffset;
+
+ private Path mTopPath;
+ private Path mBottomPath;
+
+ private int mBezierHeight;
+
+ public HeartView(Context context) {
+ this(context, null);
+ }
+
+ public HeartView(Context context, @Nullable AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public HeartView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init(context);
+ }
+
+ private void init(Context context) {
+ // 初始化变量
+ mTextSize = dpToPx(16);
+ mOffset = dpToPx(2.5f);
+ mBezierHeight = dpToPx(10);
+
+ mTopBgColor = ContextCompat.getColor(context, R.color.canvas_pink_color);
+ mBottomBgColor = ContextCompat.getColor(context, R.color.canvas_light_blue_color);
+
+ // 初始化对象
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+
+ mHeartRect = new RectF();
+ mTopPath = new Path();
+ mBottomPath = new Path();
+
+ // 初始化心形路径
+ mHeartPath = new Path();
+ createHeart(mHeartPath);
+ mCurPos = mHeartRect.bottom;
+
+ // 贝塞尔曲线动画
+ mBezierAnim = ValueAnimator.ofFloat(0, 1f);
+ mBezierAnim.setDuration(4_000);
+ mBezierAnim.setRepeatCount(ValueAnimator.INFINITE);
+ mBezierAnim.setInterpolator(new LinearInterpolator());
+ mBezierAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ mCurOffset = (mCurOffset + mOffset) % (int) mWidth;
+ }
+ });
+
+ // 初始化 增加的动画
+ mUpAnim = ObjectAnimator.ofFloat(this, "process", 0, 1);
+ mUpAnim.setInterpolator(new LinearInterpolator());
+ mUpAnim.setDuration(6_000);
+ }
+
+ /**
+ * 构建心形
+ */
+ private void createHeart(Path path) {
+ List pointList = new ArrayList<>();
+ pointList.add(new PointF(0, dpToPx(-38)));
+ pointList.add(new PointF(dpToPx(50), dpToPx(-103)));
+ pointList.add(new PointF(dpToPx(112), dpToPx(-61)));
+ pointList.add(new PointF(dpToPx(112), dpToPx(-12)));
+ pointList.add(new PointF(dpToPx(112), dpToPx(37)));
+ pointList.add(new PointF(dpToPx(51), dpToPx(90)));
+ pointList.add(new PointF(0, dpToPx(129)));
+ pointList.add(new PointF(dpToPx(-51), dpToPx(90)));
+ pointList.add(new PointF(dpToPx(-112), dpToPx(37)));
+ pointList.add(new PointF(dpToPx(-112), dpToPx(-12)));
+ pointList.add(new PointF(dpToPx(-112), dpToPx(-61)));
+ pointList.add(new PointF(dpToPx(-50), dpToPx(-103)));
+
+ path.reset();
+ for (int i = 0; i < 4; i++) {
+ if (i == 0) {
+ path.moveTo(pointList.get(i * 3).x, pointList.get(i * 3).y);
+ } else {
+ path.lineTo(pointList.get(i * 3).x, pointList.get(i * 3).y);
+ }
+
+ int endPointIndex;
+ if (i == 3) {
+ endPointIndex = 0;
+ } else {
+ endPointIndex = i * 3 + 3;
+ }
+
+ path.cubicTo(pointList.get(i * 3 + 1).x, pointList.get(i * 3 + 1).y,
+ pointList.get(i * 3 + 2).x, pointList.get(i * 3 + 2).y,
+ pointList.get(endPointIndex).x, pointList.get(endPointIndex).y);
+ }
+ path.close();
+
+ path.computeBounds(mHeartRect, false);
+ }
+
+ public void start() {
+ if (mAnimSet != null) {
+ mAnimSet.cancel();
+ }
+
+ mAnimSet = new AnimatorSet();
+ mAnimSet.play(mUpAnim)
+ .with(mBezierAnim);
+ mAnimSet.start();
+
+ }
+
+ /**
+ * 当前进度
+ *
+ * @param process 范围 [0-1]
+ */
+ public void setProcess(float process) {
+ // 如果心形的rect为空,直接中止
+ if (mHeartRect.isEmpty()) {
+ if (mUpAnim != null) {
+ mUpAnim.cancel();
+ }
+
+ return;
+ }
+
+ float curHeight = mHeartRect.height() * process;
+
+ mCurPos = mHeartRect.bottom - curHeight;
+ postInvalidate();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+ int width = getMeasuredWidth();
+ int height = getMeasuredHeight();
+
+ int waveLength = width / 3;
+ int totalLength = width * 2 + waveLength;
+
+ // 初始化 浪的路径
+ initPath(mTopPath,
+ waveLength,
+ mBezierHeight,
+ totalLength,
+ width,
+ height,
+ true);
+
+ // 初始化 浪的路径
+ initPath(mBottomPath, waveLength,
+ mBezierHeight,
+ totalLength,
+ width,
+ height,
+ false);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ int width = getWidth();
+ int height = getHeight();
+
+ canvas.translate(width / 2, height / 2);
+
+ canvas.clipPath(mHeartPath);
+
+ canvas.save();
+ canvas.translate(-mCurOffset, mCurPos);
+
+ canvas.clipPath(mTopPath);
+ mPaint.setColor(mTopBgColor);
+ mPaint.setStyle(Paint.Style.FILL);
+ canvas.drawPath(mTopPath, mPaint);
+
+ canvas.translate(mCurOffset, -mCurPos);
+ drawText(canvas, mBottomBgColor);
+ canvas.restore();
+
+ canvas.save();
+ canvas.translate(-mCurOffset, mCurPos);
+ canvas.clipPath(mBottomPath);
+ mPaint.setColor(ContextCompat.getColor(getContext(), R.color.canvas_light_blue_color));
+ mPaint.setStyle(Paint.Style.FILL);
+ canvas.drawPath(mBottomPath, mPaint);
+
+ canvas.translate(mCurOffset, -mCurPos);
+ drawText(canvas, mTopBgColor);
+ canvas.restore();
+
+ }
+
+ private float mWidth;
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ mWidth = w;
+ }
+
+ private void drawText(Canvas canvas, int textColor) {
+ mPaint.setColor(textColor);
+ mPaint.setTextAlign(Paint.Align.CENTER);
+ mPaint.setTextSize(mTextSize);
+ mPaint.setTypeface(Typeface.SANS_SERIF);
+
+ Paint.FontMetrics fontMetrics = mPaint.getFontMetrics();
+ float y = fontMetrics.bottom;
+
+ canvas.drawText(SHOW_CONTENT, 0, y, mPaint);
+ }
+
+ /**
+ * @param path 路径
+ * @param length 曲线的宽度
+ * @param height 贝塞尔曲线的高度
+ * @param totalLength 总长度
+ * @param screenWidth 屏幕宽
+ * @param screenHeight 屏幕高
+ * @param isTop 是否为上部份
+ */
+ private void initPath(Path path,
+ int length,
+ int height,
+ int totalLength,
+ int screenWidth,
+ int screenHeight,
+ boolean isTop) {
+
+ int left;
+ int right;
+ int top;
+ int bottom;
+
+ if (isTop) {
+ left = -length - screenWidth / 2;
+ right = screenWidth + screenWidth / 2;
+ top = -screenHeight;
+ bottom = 0;
+ path.moveTo(left, bottom);
+ } else {
+ left = -length - screenWidth / 2;
+ right = screenWidth + screenWidth / 2;
+ top = 0;
+ bottom = screenHeight;
+ path.moveTo(left, top);
+ }
+
+ for (int i = -length; i < totalLength; i += length) {
+ // rQuadTo 和 quadTo 区别在于
+ // rQuadTo 是相对上一个点 而 quadTo是相对于画布
+ path.rQuadTo(length / 4,
+ -height,
+ length / 2,
+ 0);
+ path.rQuadTo(length / 4,
+ height,
+ length / 2,
+ 0);
+ }
+
+ if (isTop) {
+ path.lineTo(right, top);
+ path.lineTo(left, top);
+ } else {
+ path.lineTo(right, bottom);
+ path.lineTo(left, bottom);
+ }
+
+ path.close();
+ }
+
+ /**
+ * 转换 dp 至 px
+ *
+ * @param dpValue dp值
+ * @return px值
+ */
+ protected int dpToPx(float dpValue) {
+ DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
+ return (int) (dpValue * metrics.density + 0.5f);
+ }
+}
diff --git a/code8_canvas_clip/src/main/res/layout/activity_canvas_clip_client.xml b/code8_canvas_clip/src/main/res/layout/activity_canvas_clip_client.xml
new file mode 100644
index 0000000..356889c
--- /dev/null
+++ b/code8_canvas_clip/src/main/res/layout/activity_canvas_clip_client.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code8_canvas_clip/src/main/res/layout/activity_canvas_heart.xml b/code8_canvas_clip/src/main/res/layout/activity_canvas_heart.xml
new file mode 100644
index 0000000..eb8606d
--- /dev/null
+++ b/code8_canvas_clip/src/main/res/layout/activity_canvas_heart.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code8_canvas_clip/src/main/res/layout/activity_clip_list.xml b/code8_canvas_clip/src/main/res/layout/activity_clip_list.xml
new file mode 100644
index 0000000..040f377
--- /dev/null
+++ b/code8_canvas_clip/src/main/res/layout/activity_clip_list.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code8_canvas_clip/src/main/res/values/strings.xml b/code8_canvas_clip/src/main/res/values/strings.xml
new file mode 100644
index 0000000..528f6ab
--- /dev/null
+++ b/code8_canvas_clip/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ code8_canvas_clip
+
diff --git a/code8_canvas_draw/.gitignore b/code8_canvas_draw/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/code8_canvas_draw/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/code8_canvas/build.gradle b/code8_canvas_draw/build.gradle
similarity index 100%
rename from code8_canvas/build.gradle
rename to code8_canvas_draw/build.gradle
diff --git a/code8_canvas_draw/proguard-rules.pro b/code8_canvas_draw/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/code8_canvas_draw/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/code8_canvas/src/main/AndroidManifest.xml b/code8_canvas_draw/src/main/AndroidManifest.xml
similarity index 88%
rename from code8_canvas/src/main/AndroidManifest.xml
rename to code8_canvas_draw/src/main/AndroidManifest.xml
index b631266..5b62c20 100644
--- a/code8_canvas/src/main/AndroidManifest.xml
+++ b/code8_canvas_draw/src/main/AndroidManifest.xml
@@ -8,6 +8,7 @@
+
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/activity/ClientActivity.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/ClientActivity.java
similarity index 69%
rename from code8_canvas/src/main/java/com/zinc/canvas/activity/ClientActivity.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/activity/ClientActivity.java
index 266c9d5..e73d2ec 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/activity/ClientActivity.java
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/ClientActivity.java
@@ -7,15 +7,6 @@
import android.view.View;
import com.zinc.canvas.R;
-import com.zinc.canvas.widget.draw.ArcView;
-import com.zinc.canvas.widget.draw.BackgroundView;
-import com.zinc.canvas.widget.draw.ClipView;
-import com.zinc.canvas.widget.draw.LineView;
-import com.zinc.canvas.widget.draw.OvalView;
-import com.zinc.canvas.widget.draw.PathTextView;
-import com.zinc.canvas.widget.draw.PointView;
-import com.zinc.canvas.widget.draw.RectView;
-import com.zinc.canvas.widget.draw.TextView;
/**
* author : Jiang zinc
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/activity/ClockActivity.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/ClockActivity.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/activity/ClockActivity.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/activity/ClockActivity.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/activity/CommonListActivity.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/CommonListActivity.java
similarity index 82%
rename from code8_canvas/src/main/java/com/zinc/canvas/activity/CommonListActivity.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/activity/CommonListActivity.java
index b771c22..9e5ca9b 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/activity/CommonListActivity.java
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/CommonListActivity.java
@@ -19,7 +19,7 @@ public class CommonListActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_common_list);
+ setContentView(R.layout.activity_draw_list);
}
public void onClip(View view) {
@@ -43,23 +43,23 @@ public void onOval(View view) {
}
public void onPoint(View view) {
- goToAct(CommonOperatorActivity.OVAL);
+ goToAct(CommonOperatorActivity.POINT);
}
public void onText(View view) {
- goToAct(CommonOperatorActivity.OVAL);
+ goToAct(CommonOperatorActivity.TEXT);
}
public void onRect(View view) {
- goToAct(CommonOperatorActivity.OVAL);
+ goToAct(CommonOperatorActivity.RECT);
}
public void onColor(View view) {
- goToAct(CommonOperatorActivity.OVAL);
+ goToAct(CommonOperatorActivity.COLOR);
}
public void onPathText(View view) {
- goToAct(CommonOperatorActivity.OVAL);
+ goToAct(CommonOperatorActivity.TEXT_PATH);
}
private void goToAct(int type) {
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/activity/CommonOperatorActivity.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/CommonOperatorActivity.java
similarity index 80%
rename from code8_canvas/src/main/java/com/zinc/canvas/activity/CommonOperatorActivity.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/activity/CommonOperatorActivity.java
index 79c0681..22e1310 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/activity/CommonOperatorActivity.java
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/CommonOperatorActivity.java
@@ -1,7 +1,6 @@
package com.zinc.canvas.activity;
import android.app.Activity;
-import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
@@ -14,10 +13,12 @@
import com.zinc.canvas.widget.draw.ClipView;
import com.zinc.canvas.widget.draw.LineView;
import com.zinc.canvas.widget.draw.OvalView;
-import com.zinc.canvas.widget.draw.PathTextView;
+import com.zinc.canvas.widget.text.TextOnPathView;
import com.zinc.canvas.widget.draw.PointView;
import com.zinc.canvas.widget.draw.RectView;
-import com.zinc.canvas.widget.draw.TextView;
+import com.zinc.canvas.widget.text.TextPosText;
+import com.zinc.canvas.widget.text.TextRunView;
+import com.zinc.canvas.widget.text.TextView;
/**
* author : zinc
@@ -38,7 +39,9 @@ public class CommonOperatorActivity extends Activity {
public static final int TEXT = 7;
public static final int RECT = 8;
public static final int COLOR = 9;
- public static final int PATH_TEXT = 10;
+ public static final int TEXT_PATH = 10;
+ public static final int TEXT_RUN = 11;
+ public static final int TEXT_POS = 12;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -77,8 +80,14 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
case COLOR:
view = new BackgroundView(this);
break;
- case PATH_TEXT:
- view = new PathTextView(this);
+ case TEXT_PATH:
+ view = new TextOnPathView(this);
+ break;
+ case TEXT_RUN:
+ view = new TextRunView(this);
+ break;
+ case TEXT_POS:
+ view = new TextPosText(this);
break;
default:
view = new ClipView(this);
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/activity/HeartActivity.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/HeartActivity.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/activity/HeartActivity.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/activity/HeartActivity.java
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/TextListActivity.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/TextListActivity.java
new file mode 100644
index 0000000..e89f287
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/activity/TextListActivity.java
@@ -0,0 +1,47 @@
+package com.zinc.canvas.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+
+import com.zinc.canvas.R;
+
+/**
+ * author : zinc
+ * time : 2019/4/24 下午11:32
+ * desc :
+ * version :
+ */
+public class TextListActivity extends Activity {
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_text_list);
+ }
+
+ public void onText(View view) {
+ goToAct(CommonOperatorActivity.TEXT);
+ }
+
+ public void onTextPath(View view) {
+ goToAct(CommonOperatorActivity.TEXT_PATH);
+ }
+
+ public void onTextRun(View view) {
+ goToAct(CommonOperatorActivity.TEXT_RUN);
+ }
+
+ public void onTextPos(View view) {
+ goToAct(CommonOperatorActivity.TEXT_POS);
+ }
+
+ private void goToAct(int type) {
+ Intent intent = new Intent(this, CommonOperatorActivity.class);
+ intent.putExtra(CommonOperatorActivity.TYPE, type);
+ startActivity(intent);
+ }
+
+}
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/ClockView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/ClockView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/ClockView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/ClockView.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/HeartView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/HeartView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/HeartView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/HeartView.java
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/MatrixView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/MatrixView.java
new file mode 100644
index 0000000..9f318cd
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/MatrixView.java
@@ -0,0 +1,27 @@
+package com.zinc.canvas.widget.control;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
+/**
+ * author : zinc
+ * time : 2019/4/25 下午11:44
+ * desc :
+ * version :
+ */
+public class MatrixView extends BaseDrawView {
+ public MatrixView(Context context) {
+ super(context);
+ }
+
+ public MatrixView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public MatrixView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+}
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/RotateView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/RotateView.java
new file mode 100644
index 0000000..f80c4f0
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/RotateView.java
@@ -0,0 +1,29 @@
+package com.zinc.canvas.widget.control;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
+/**
+ * author : zinc
+ * time : 2019/4/25 下午11:44
+ * desc :
+ * version :
+ */
+public class RotateView extends BaseDrawView {
+ public RotateView(Context context) {
+ super(context);
+ }
+
+ public RotateView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public RotateView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+
+}
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/ScaleView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/ScaleView.java
new file mode 100644
index 0000000..6f6d8fd
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/ScaleView.java
@@ -0,0 +1,27 @@
+package com.zinc.canvas.widget.control;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
+/**
+ * author : zinc
+ * time : 2019/4/25 下午11:44
+ * desc :
+ * version :
+ */
+public class ScaleView extends BaseDrawView {
+ public ScaleView(Context context) {
+ super(context);
+ }
+
+ public ScaleView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ScaleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+}
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/Skew.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/Skew.java
new file mode 100644
index 0000000..c6dc4fc
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/Skew.java
@@ -0,0 +1,27 @@
+package com.zinc.canvas.widget.control;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
+/**
+ * author : zinc
+ * time : 2019/4/25 下午11:44
+ * desc :
+ * version :
+ */
+public class Skew extends BaseDrawView {
+ public Skew(Context context) {
+ super(context);
+ }
+
+ public Skew(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public Skew(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+}
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/TranslateView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/TranslateView.java
new file mode 100644
index 0000000..ddb508d
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/control/TranslateView.java
@@ -0,0 +1,27 @@
+package com.zinc.canvas.widget.control;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
+/**
+ * author : zinc
+ * time : 2019/4/25 下午11:44
+ * desc :
+ * version :
+ */
+public class TranslateView extends BaseDrawView {
+ public TranslateView(Context context) {
+ super(context);
+ }
+
+ public TranslateView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public TranslateView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+}
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/ArcView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/ArcView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/ArcView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/ArcView.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/BackgroundView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/BackgroundView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/BackgroundView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/BackgroundView.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/BaseDrawView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/BaseDrawView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/BaseDrawView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/BaseDrawView.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/CircleView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/CircleView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/CircleView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/CircleView.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/LineView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/LineView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/LineView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/LineView.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/OvalView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/OvalView.java
similarity index 100%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/OvalView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/OvalView.java
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/PointView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/PointView.java
similarity index 92%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/PointView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/PointView.java
index 8f18dcd..6d39a34 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/PointView.java
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/PointView.java
@@ -52,7 +52,7 @@ protected void onDraw(Canvas canvas) {
setPaint(mColor2, mPointWidth1);
canvas.drawPoints(pts, mPaint);
- setPaint(mColor1, mPointWidth2);
- canvas.drawPoints(pts, 2, pts.length - 3, mPaint);
+// setPaint(mColor1, mPointWidth2);
+// canvas.drawPoints(pts, 2, pts.length - 3, mPaint);
}
}
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/RectView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/RectView.java
similarity index 95%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/RectView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/RectView.java
index f003176..a06695c 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/RectView.java
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/draw/RectView.java
@@ -43,7 +43,7 @@ protected void onDraw(Canvas canvas) {
setPaint(mColor2, mLineWidth);
mPaint.setStyle(Paint.Style.STROKE);
canvas.translate(0, mRectF.height() + dpToPx(100));
- canvas.drawRoundRect(mRectF, 50, 50, mPaint);
+ canvas.drawRoundRect(mRectF, 50, 150, mPaint);
canvas.restore();
}
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/PathTextView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextOnPathView.java
similarity index 53%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/PathTextView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextOnPathView.java
index e35062e..7f33f20 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/PathTextView.java
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextOnPathView.java
@@ -1,10 +1,17 @@
-package com.zinc.canvas.widget.draw;
+package com.zinc.canvas.widget.text;
+import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
import android.graphics.Path;
+import android.graphics.PathMeasure;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
+import android.view.animation.LinearInterpolator;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
/**
* author : zinc
@@ -12,23 +19,24 @@
* desc :
* version :
*/
-public class PathTextView extends BaseDrawView {
+public class TextOnPathView extends BaseDrawView {
private static final String CONTENT = "zinc 猛猛的小盆友";
+ private static final char[] C = "https://blog.csdn.net/weixin_37625173".toCharArray();
private Path mPath;
private int mTextSize;
- public PathTextView(Context context) {
+ public TextOnPathView(Context context) {
super(context);
}
- public PathTextView(Context context, @Nullable AttributeSet attrs) {
+ public TextOnPathView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
- public PathTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ public TextOnPathView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@@ -45,13 +53,30 @@ protected void init(Context context) {
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
- initPath(mPath, 150, 200, getWidth());
+ if(mPath.isEmpty()){
+ initPath(mPath, 200, 50, getWidth());
+ }
mPaint.setColor(mColor1);
mPaint.setTextSize(mTextSize);
-
canvas.drawTextOnPath(CONTENT, mPath, 0, 0, mPaint);
+ mPaint.setColor(Color.RED);
+ mPaint.setStrokeWidth(mBorderWidth);
+ mPaint.setStyle(Paint.Style.STROKE);
+ canvas.drawPath(mPath, mPaint);
+
+ canvas.translate(0, 300);
+
+ mPaint.setColor(mColor2);
+ mPaint.setTextSize(dpToPx(18));
+ canvas.drawTextOnPath(C, 2, 20, mPath, 0, 0, mPaint);
+
+ mPaint.setColor(Color.RED);
+ mPaint.setStrokeWidth(mBorderWidth);
+ mPaint.setStyle(Paint.Style.STROKE);
+ canvas.drawPath(mPath, mPaint);
+
}
/**
@@ -65,9 +90,9 @@ private void initPath(Path path,
int height,
int screenWidth) {
- path.moveTo(-screenWidth / 2, 0);
+ path.moveTo(-screenWidth / 3, 0);
- for (int i = 0; i < screenWidth; i += length) {
+ for (int i = 0; i < screenWidth * 2 / 3; i += length) {
path.rQuadTo(length / 4,
-height,
length / 2,
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextPosText.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextPosText.java
new file mode 100644
index 0000000..3d1823d
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextPosText.java
@@ -0,0 +1,72 @@
+package com.zinc.canvas.widget.text;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
+/**
+ * author : zinc
+ * time : 2019/4/25 下午11:19
+ * desc :
+ * version :
+ */
+public class TextPosText extends BaseDrawView {
+
+ private static final String CONTENT = "猛猛的小盆友";
+
+ private static final float[] pos1 = new float[]{
+ -300, -600,
+ -250, -500,
+ -200, -400,
+ -150, -300,
+ -100, -200,
+ -50, -100,
+ };
+
+ private static final float[] pos2 = new float[]{
+ -300, 100,
+ -250, 200,
+ -200, 300,
+ -150, 400,
+ -100, 500,
+ };
+
+ private int mTextSize;
+
+ public TextPosText(Context context) {
+ super(context);
+ }
+
+ public TextPosText(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public TextPosText(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void init(Context context) {
+ super.init(context);
+ mTextSize = dpToPx(14);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ mPaint.setColor(mColor1);
+ mPaint.setTextSize(mTextSize);
+
+ canvas.drawPosText(CONTENT, pos1, mPaint);
+
+ mPaint.setColor(mColor2);
+ mPaint.setTextSize(mTextSize);
+ canvas.drawPosText(CONTENT.toCharArray(), 1, 4, pos2, mPaint);
+
+ }
+
+}
diff --git a/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextRunView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextRunView.java
new file mode 100644
index 0000000..5f226c0
--- /dev/null
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextRunView.java
@@ -0,0 +1,79 @@
+package com.zinc.canvas.widget.text;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.os.Build;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
+/**
+ * author : zinc
+ * time : 2019/4/22 下午5:05
+ * desc :
+ * version :
+ */
+public class TextRunView extends BaseDrawView {
+
+ private static final String CONTENT_S = "عرفي تحكي عربي";
+
+ private static final char[] CONTENT = CONTENT_S.toCharArray();
+
+ private int mTextSize;
+
+ public TextRunView(Context context) {
+ super(context);
+ }
+
+ public TextRunView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public TextRunView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected void init(Context context) {
+ super.init(context);
+
+ mTextSize = dpToPx(14);
+
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ int x = -100;
+
+ mPaint.setColor(mColor1);
+ mPaint.setTextSize(mTextSize);
+ canvas.drawText(CONTENT, 0, CONTENT.length, x, -300, mPaint);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ canvas.drawTextRun(CONTENT, 0, CONTENT.length,
+ 0, CONTENT.length, x, -200, false, mPaint);
+ }
+
+// mPaint.setColor(mColor2);
+// mPaint.setTextSize(mTextSize);
+// canvas.drawText(CONTENT, 0, CONTENT.length - 1, x, 0, mPaint);
+// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+// canvas.drawTextRun(CONTENT, 0, CONTENT.length - 1,
+// 0, CONTENT.length - 1, x, 100, false, mPaint);
+// }
+
+ mPaint.setColor(mColor1);
+ mPaint.setTextSize(mTextSize);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ canvas.drawTextRun(CONTENT, 1, CONTENT.length - 2,
+ 0, CONTENT.length, x, 300, true, mPaint);
+ }
+
+ }
+
+}
diff --git a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/TextView.java b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextView.java
similarity index 61%
rename from code8_canvas/src/main/java/com/zinc/canvas/widget/draw/TextView.java
rename to code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextView.java
index acc0946..fcceea3 100644
--- a/code8_canvas/src/main/java/com/zinc/canvas/widget/draw/TextView.java
+++ b/code8_canvas_draw/src/main/java/com/zinc/canvas/widget/text/TextView.java
@@ -1,10 +1,12 @@
-package com.zinc.canvas.widget.draw;
+package com.zinc.canvas.widget.text;
import android.content.Context;
import android.graphics.Canvas;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
+import com.zinc.canvas.widget.draw.BaseDrawView;
+
/**
* author : zinc
* time : 2019/4/22 上午9:23
@@ -15,9 +17,11 @@ public class TextView extends BaseDrawView {
private static final String CONTENT = "zinc 猛猛的小盆友";
- private int mTextSize;
+ private static final CharSequence SEQ = "https://blog.csdn.net/weixin_37625173";
- private float[] mPos;
+ private static final char[] C = "https://github.com/zincPower/UI2018".toCharArray();
+
+ private int mTextSize;
public TextView(Context context) {
super(context);
@@ -35,9 +39,6 @@ public TextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
protected void init(Context context) {
super.init(context);
mTextSize = dpToPx(14);
- mPos = new float[]{
- 0, dpToPx(200)
- };
}
@Override
@@ -47,10 +48,18 @@ protected void onDraw(Canvas canvas) {
setPaint(mColor1, mLineWidth);
mPaint.setTextSize(mTextSize);
- canvas.drawText(CONTENT, 0, 0, mPaint);
+ int x = -300;
+
+ canvas.drawText(CONTENT, x, -500, mPaint);
+ canvas.drawText(CONTENT, 3, CONTENT.length(), x, -400, mPaint);
+
+
+ canvas.drawText(C, 0, C.length, x, -100, mPaint);
+ canvas.drawText(C, 5, 10, x, 0, mPaint);
+
- canvas.drawText(CONTENT, 3, CONTENT.length(),
- 0, dpToPx(100), mPaint);
+ canvas.drawText(SEQ, 0, SEQ.length(), x, 300, mPaint);
+ canvas.drawText(SEQ, 6, 20, x, 400, mPaint);
}
}
diff --git a/code8_canvas/src/main/res/drawable/logo.png b/code8_canvas_draw/src/main/res/drawable/logo.png
similarity index 100%
rename from code8_canvas/src/main/res/drawable/logo.png
rename to code8_canvas_draw/src/main/res/drawable/logo.png
diff --git a/code8_canvas/src/main/res/layout/activity_canvas_client.xml b/code8_canvas_draw/src/main/res/layout/activity_canvas_client.xml
similarity index 100%
rename from code8_canvas/src/main/res/layout/activity_canvas_client.xml
rename to code8_canvas_draw/src/main/res/layout/activity_canvas_client.xml
diff --git a/code8_canvas/src/main/res/layout/activity_canvas_clock.xml b/code8_canvas_draw/src/main/res/layout/activity_canvas_clock.xml
similarity index 100%
rename from code8_canvas/src/main/res/layout/activity_canvas_clock.xml
rename to code8_canvas_draw/src/main/res/layout/activity_canvas_clock.xml
diff --git a/code8_canvas/src/main/res/layout/activity_canvas_heart.xml b/code8_canvas_draw/src/main/res/layout/activity_canvas_heart.xml
similarity index 100%
rename from code8_canvas/src/main/res/layout/activity_canvas_heart.xml
rename to code8_canvas_draw/src/main/res/layout/activity_canvas_heart.xml
diff --git a/code8_canvas/src/main/res/layout/activity_common_operator.xml b/code8_canvas_draw/src/main/res/layout/activity_common_operator.xml
similarity index 100%
rename from code8_canvas/src/main/res/layout/activity_common_operator.xml
rename to code8_canvas_draw/src/main/res/layout/activity_common_operator.xml
diff --git a/code8_canvas/src/main/res/layout/activity_common_list.xml b/code8_canvas_draw/src/main/res/layout/activity_draw_list.xml
similarity index 58%
rename from code8_canvas/src/main/res/layout/activity_common_list.xml
rename to code8_canvas_draw/src/main/res/layout/activity_draw_list.xml
index 0764bf0..3133d6f 100644
--- a/code8_canvas/src/main/res/layout/activity_common_list.xml
+++ b/code8_canvas_draw/src/main/res/layout/activity_draw_list.xml
@@ -16,27 +16,42 @@
+ android:text="0、clip(裁剪)" />
+ android:text="1、circle(圆)" />
+ android:text="2、oval(椭圆)" />
+ android:text="3、line(线)" />
+ android:text="4、arc(弧)" />
+
+
+
+
+
+
diff --git a/code8_canvas_draw/src/main/res/layout/activity_text_list.xml b/code8_canvas_draw/src/main/res/layout/activity_text_list.xml
new file mode 100644
index 0000000..b30d60f
--- /dev/null
+++ b/code8_canvas_draw/src/main/res/layout/activity_text_list.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/code8_canvas/src/main/res/values/colors.xml b/code8_canvas_draw/src/main/res/values/colors.xml
similarity index 100%
rename from code8_canvas/src/main/res/values/colors.xml
rename to code8_canvas_draw/src/main/res/values/colors.xml
diff --git a/code8_canvas/src/main/res/values/strings.xml b/code8_canvas_draw/src/main/res/values/strings.xml
similarity index 100%
rename from code8_canvas/src/main/res/values/strings.xml
rename to code8_canvas_draw/src/main/res/values/strings.xml
diff --git a/lib_base/src/main/res/values/colors.xml b/lib_base/src/main/res/values/colors.xml
new file mode 100644
index 0000000..a68b026
--- /dev/null
+++ b/lib_base/src/main/res/values/colors.xml
@@ -0,0 +1,14 @@
+
+
+
+ #ffe6eb
+ #a6e3e9
+
+ #ca2374
+ #fe9191
+
+ #ccfe9191
+
+ #defcfc
+
+
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index bb4456f..69eb5cd 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -6,7 +6,8 @@ include ':app',
':code5_velocitytracker_scroller',
':code6_flowlayout',
':code7_svg',
- ':code8_canvas',
- ':code9_paint',
+ ':code8_canvas_clip',
+// ':code8_canvas_draw',
+// ':code9_paint',
':lib_base'