diff --git a/app/src/main/java/ir/smartdevelop/eram/showcaseview/CircleView.java b/app/src/main/java/ir/smartdevelop/eram/showcaseview/CircleView.java new file mode 100644 index 00000000..818d04e8 --- /dev/null +++ b/app/src/main/java/ir/smartdevelop/eram/showcaseview/CircleView.java @@ -0,0 +1,113 @@ +package ir.smartdevelop.eram.showcaseview; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.View; + +import smartdevelop.ir.eram.showcaseviewlib.Targetable; + +public class CircleView extends View implements Targetable { + + private static final int DEFAULT_CIRCLE_COLOR = Color.RED; + private int _circleColor = DEFAULT_CIRCLE_COLOR; + private Paint _paint; + private Path _guidePath = new Path(); + private RectF _boundingRect = new RectF(); + + public CircleView(Context context) + { + super(context); + init(context, null); + } + + public CircleView(Context context, AttributeSet attrs) + { + super(context, attrs); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) + { + _paint = new Paint(); + _paint.setAntiAlias(true); + } + + public void setCircleColor(int circleColor) + { + this._circleColor = circleColor; + invalidate(); + } + + public int getCircleColor() + { + return _circleColor; + } + + private int usableWidth() { + int w = getWidth(); + + int pl = getPaddingLeft(); + int pr = getPaddingRight(); + + return w - (pl + pr); + } + + private int usableHeight() { + int h = getHeight(); + + int pt = getPaddingTop(); + int pb = getPaddingBottom(); + + return h - (pt + pb); + } + + protected void onDraw(Canvas canvas) + { + super.onDraw(canvas); + + int pl = getPaddingLeft(); + int pt = getPaddingTop(); + + int usableWidth = this.usableWidth(); + int usableHeight = this.usableHeight(); + + int halfUsableWidth = usableWidth / 2; + int halfUsableHeight = usableHeight / 2; + + int radius = Math.min(usableWidth, usableHeight) / 2; + int cx = pl + halfUsableWidth; + int cy = pt + halfUsableHeight; + + _paint.setColor(_circleColor); + + canvas.drawCircle(cx, cy, radius, _paint); + + int[] locationTarget = new int[2]; + getLocationOnScreen(locationTarget); + int centerX = pl + halfUsableWidth + locationTarget[0]; + int centerY = pt + halfUsableHeight + locationTarget[1]; + _guidePath.reset(); + _guidePath.addCircle(centerX, centerY, radius, Path.Direction.CW); + + _boundingRect.left = locationTarget[0]; + _boundingRect.top = locationTarget[1]; + _boundingRect.right = locationTarget[0] + getWidth(); + _boundingRect.bottom = locationTarget[1] + getHeight(); + + } + + @Override + public Path guidePath() { + return _guidePath; + } + + @Override + public RectF boundingRect() { + return _boundingRect; + } +} diff --git a/app/src/main/java/ir/smartdevelop/eram/showcaseview/MainActivity.java b/app/src/main/java/ir/smartdevelop/eram/showcaseview/MainActivity.java index 1eccaa9d..b225ea0d 100644 --- a/app/src/main/java/ir/smartdevelop/eram/showcaseview/MainActivity.java +++ b/app/src/main/java/ir/smartdevelop/eram/showcaseview/MainActivity.java @@ -17,6 +17,7 @@ public class MainActivity extends AppCompatActivity { View view3; View view4; View view5; + View view6; private GuideView mGuideView; private GuideView.Builder builder; @@ -30,6 +31,7 @@ protected void onCreate(Bundle savedInstanceState) { view3 = findViewById(R.id.view3); view4 = findViewById(R.id.view4); view5 = findViewById(R.id.view5); + view6 = findViewById(R.id.view6); builder = new GuideView.Builder(this) .setTitle("Guide Title Text") @@ -54,6 +56,9 @@ public void onDismiss(View view) { builder.setTargetView(view5).build(); break; case R.id.view5: + builder.setTargetView(view6).build(); + break; + case R.id.view6: return; } mGuideView = builder.build(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 255dc5ea..a76eadba 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -50,6 +50,15 @@ android:padding="10dp" android:text="Guide Test 4" /> + +