Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.draw;
- import android.app.AlertDialog;
- import android.app.Dialog;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.BitmapShader;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.Shader;
- import android.graphics.Paint.Style;
- import android.graphics.Path;
- import android.graphics.PointF;
- import android.graphics.RectF;
- import android.util.AttributeSet;
- import android.util.Log;
- import android.view.Display;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.ViewGroup;
- import android.view.WindowManager;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- import android.widget.Toast;
- /*
- * Project: Blocks With Friends
- * Creating Custom view ( Drawing ThreePoint's like Triangle
- * Developed By RajaReddy (ColorsSoft)
- * on 20/06/2012
- */
- public class ThreePointDraw extends View {
- private float top_right, top_left, left_right;
- public ThreePointDraw(Context context) {
- super(context);
- _context = context;
- init();
- }
- public ThreePointDraw(Context context, AttributeSet attrs) {
- super(context, attrs);
- _context = context;
- init();
- }
- public ThreePointDraw(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- _context = context;
- init();
- }
- private void init() {
- /* Painting declaration's */
- Inner_Paint = new Paint(Paint.FILTER_BITMAP_FLAG);
- Inner_Paint.setStyle(Paint.Style.FILL_AND_STROKE);
- Inner_Paint.setStrokeJoin(Paint.Join.ROUND);
- Inner_Paint.setStrokeWidth(5);
- /* set color for paint */
- Inner_Paint.setColor(Color.GREEN);
- /* set bitmap for paint instead of color */
- Bitmap bm = BitmapFactory.decodeResource(getResources(),
- R.drawable.patterntwo);
- Shader mShader1 = new BitmapShader(bm, Shader.TileMode.REPEAT,
- Shader.TileMode.REPEAT);
- Inner_Paint.setShader(mShader1);
- bm.recycle();
- Lines_Paint = new Paint();
- Lines_Paint.setColor(Color.RED);
- Lines_Paint.setStyle(Style.STROKE);
- Lines_Paint.setStrokeWidth(5);
- Lines_Paint.setAntiAlias(true);
- Points_Paint = new Paint();
- Text_Paint = new Paint();
- Angle_Paint = new Paint();
- /* Main points */
- Top_Point = new PointF(65, 50);
- Left_Point = new PointF(10, 130);
- Right_Point = new PointF(120, 130);
- /* Required points */
- point_on_LeftTop = new PointF(0, 0);
- point_on_LeftRight = new PointF(0, 0);
- point_on_RightTop = new PointF(0, 0);
- point_on_RightLeft = new PointF(0, 0);
- point_on_TopRight = new PointF(0, 0);
- point_on_TopLeft = new PointF(0, 0);
- Translate_Point = new PointF(0, 0);
- CreateTouch_PointsFor_Pulling();
- Angle_Paint_Colors();
- setOnLongClickListener(new OnLongClickListener() {
- public boolean onLongClick(View v) {
- ViewGroup parent = (ViewGroup) getParent();
- int i = 0;
- for (; i < parent.getChildCount(); i++) {
- if (parent.getChildAt(i) == ThreePointDraw.this) {
- break;
- }
- }
- if (i < parent.getChildCount()) {
- Toast.makeText(getContext(), "child index is: " + i,
- Toast.LENGTH_SHORT).show();
- }
- return true;
- }
- });
- }
- /* On Draw Override function for painting on the screen */
- @Override
- public void onDraw(Canvas canvas) {
- if (canvas == offscreen) {
- super.onDraw(offscreen);
- }
- _canvas = canvas;
- /* painting on inner part of the view */
- Path path = new Path();
- path.setFillType(Path.FillType.EVEN_ODD);
- path.moveTo(Top_Point.x, Top_Point.y);
- path.lineTo(Right_Point.x, Right_Point.y);
- path.lineTo(Left_Point.x, Left_Point.y);
- path.lineTo(Top_Point.x, Top_Point.y);
- path.close();
- canvas.drawPath(path, Inner_Paint);
- // canvas.clipPath(path);
- /* draw the lines between points */
- canvas.drawLine(Top_Point.x, Top_Point.y, Right_Point.x, Right_Point.y,
- Lines_Paint);
- canvas.drawLine(Right_Point.x, Right_Point.y, Left_Point.x,
- Left_Point.y, Lines_Paint);
- canvas.drawLine(Left_Point.x, Left_Point.y, Top_Point.x, Top_Point.y,
- Lines_Paint);
- /* draw the text at points for showing angles */
- canvas.drawText(String.valueOf(angle_top), Top_Point.x - 15,
- Top_Point.y - 15, Text_Paint);
- canvas.drawText(String.valueOf(angle_right), Right_Point.x - 15,
- Right_Point.y + 15, Text_Paint);
- canvas.drawText(String.valueOf(angle_left), Left_Point.x - 15,
- Left_Point.y + 15, Text_Paint);
- /* drawing Oval for touch pulling (TouchListener) */
- canvas.drawOval(TopTouchArea, Points_Paint);
- canvas.drawOval(RightTouchArea, Points_Paint);
- canvas.drawOval(LeftTouchArea, Points_Paint);
- /* creating the rectangles to draw arc */
- float radius = 20;
- final RectF oval_left = new RectF();
- oval_left.set(Left_Point.x - radius, Left_Point.y - radius,
- Left_Point.x + radius, Left_Point.y + radius);
- Path myPath1 = new Path();
- float radius1 = 20;
- final RectF oval_Right = new RectF();
- oval_Right.set(Right_Point.x - radius1, Right_Point.y - radius1,
- Right_Point.x + radius1, Right_Point.y + radius1);
- Path myPath2 = new Path();
- float radius2 = 20;
- final RectF oval_Top = new RectF();
- oval_Top.set(Top_Point.x - radius2, Top_Point.y - radius2, Top_Point.x
- + radius2, Top_Point.y + radius2);
- Path myPath3 = new Path();
- /* calculate the starting angles to draw arc */
- int startAngle = (int) (180 / Math.PI * Math.atan2(point_on_LeftRight.y
- - Left_Point.y, point_on_LeftRight.x - Left_Point.x));
- int startAngle1 = (int) (180 / Math.PI * Math.atan2(
- point_on_RightLeft.y - Right_Point.y, point_on_RightLeft.x
- - Right_Point.x));
- int startAngle2 = (int) (180 / Math.PI * Math.atan2(point_on_TopRight.y
- - Top_Point.y, point_on_TopRight.x - Top_Point.x));
- /* checking for point where it was */
- boolean _line = LineEquation_Left();
- if (_line)
- myPath1.arcTo(oval_left, startAngle, -(float) angle_left, true);
- else
- myPath1.arcTo(oval_left, startAngle, (float) angle_left, true);
- canvas.drawPath(myPath1, Angle_Paint);
- boolean _line1 = LineEquation_Right();
- if (_line1)
- myPath2.arcTo(oval_Right, startAngle1, -(float) angle_right, true);
- else
- myPath2.arcTo(oval_Right, startAngle1, +(float) angle_right, true);
- canvas.drawPath(myPath2, Angle_Paint);
- boolean _line2 = LineEquation_Top();
- if (_line2)
- myPath3.arcTo(oval_Top, startAngle2, -(float) angle_top, true);
- else
- myPath3.arcTo(oval_Top, startAngle2, +(float) angle_top, true);
- canvas.drawPath(myPath3, Angle_Paint);
- /* draw text on the path between the points for showing distance value */
- Path pa_lt = new Path();
- pa_lt.moveTo(Left_Point.x, Left_Point.y);
- pa_lt.lineTo(Top_Point.x, Top_Point.y);
- canvas.drawTextOnPath(String.valueOf(top_left), pa_lt,
- (float) (top_left / (2.3)), 15f, Text_Paint);
- Path pa_tr = new Path();
- pa_tr.moveTo(Top_Point.x, Top_Point.y);
- pa_tr.lineTo(Right_Point.x, Right_Point.y);
- canvas.drawTextOnPath(String.valueOf(top_right), pa_tr,
- (float) (top_right / (2.3)), 15f, Text_Paint);
- Path pa_rl = new Path();
- pa_rl.moveTo(Left_Point.x, Left_Point.y);
- pa_rl.lineTo(Right_Point.x, Right_Point.y);
- canvas.drawTextOnPath(String.valueOf(left_right), pa_rl,
- (float) (left_right / (2.3)), 15f, Text_Paint);
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- Log.i("Three", ": Touch");
- switch (event.getAction()) {
- // The user just put their finger down.
- // We check to see which corner the user is touching
- // And set our global, currentTouch, to the appropriate constant.
- case MotionEvent.ACTION_DOWN:
- PointF NewP = new PointF(0, 0);
- NewP.x = event.getX();
- NewP.y = event.getY();
- boolean a = CheckForLineEquations(NewP, Top_Point, Left_Point,
- Right_Point);
- // Log.i("inside", "--" + a);
- // NewPoint_InSide();
- // Log.i("X", "" + event.getX());
- // Log.i("Y", "" + event.getY());
- if (TopTouchArea.contains(event.getX(), event.getY())) {
- currentTouch = TOUCH_TOP;
- } else if (RightTouchArea.contains(event.getX(), event.getY())) {
- currentTouch = TOUCH_RIGHT;
- } else if (LeftTouchArea.contains(event.getX(), event.getY())) {
- currentTouch = TOUCH_LEFT;
- } else if (a) {
- // Log.i("IN", ": inside");
- Translate_Point.x = event.getX();
- Translate_Point.y = event.getY();
- currentTouch = Inner_Touch;
- return true; // Return false if user touches none of the
- // corners
- } else {
- return false;
- }
- return true; // Return true if the user touches one of the corners
- // Now we know which corner the user is touching.
- // When the user moves their finger, we update the point to the user
- // position and invalidate.
- case MotionEvent.ACTION_MOVE:
- CreateTouch_PointsFor_Pulling();
- CalculateAngles();
- FindPoint_OnLines();
- // touch = true;
- Angle_Paint_Colors();
- switch (currentTouch) {
- case TOUCH_TOP:
- touch = true;
- Top_Point.x = event.getX();
- Top_Point.y = event.getY();
- invalidate();
- return true;
- case TOUCH_RIGHT:
- touch = true;
- Right_Point.x = event.getX();
- Right_Point.y = event.getY();
- invalidate();
- return true;
- case TOUCH_LEFT:
- touch = true;
- Left_Point.x = event.getX();
- Left_Point.y = event.getY();
- invalidate();
- return true;
- case Inner_Touch:
- touch = false;
- // Log.i("Move", ": Touch");
- // New_Translate_Point.x = event.getX();
- // New_Translate_Point.y = event.getY();
- float _x = event.getX() - Translate_Point.x;
- float _y = event.getY() - Translate_Point.y;
- // Log.i("ChangeX", ":" + _x);
- // Log.i("ChagneY", ":" + _y);
- Top_Point.x = Top_Point.x + _x;
- Top_Point.y = Top_Point.y + _y;
- Right_Point.x = Right_Point.x + _x;
- Right_Point.y = Right_Point.y + _y;
- Left_Point.x = Left_Point.x + _x;
- Left_Point.y = Left_Point.y + _y;
- Translate_Point.x = event.getX();
- Translate_Point.y = event.getY();
- invalidate();
- return true;
- }
- // We returned true for all of the above cases, because we used the
- // event
- return false; // If currentTouch is none of the above cases, return
- // false
- // Here the user lifts up their finger.
- // We update the points one last time, and set currentTouch to NONE.
- case MotionEvent.ACTION_UP:
- // FindDifference();
- CreateTouch_PointsFor_Pulling();
- CalculateAngles();
- FindPoint_OnLines();
- // FindDifference();
- touch = false;
- Angle_Paint_Colors();
- switch (currentTouch) {
- case TOUCH_TOP:
- Top_Point.x = event.getX();
- Top_Point.y = event.getY();
- invalidate();
- currentTouch = NONE;
- return true;
- case TOUCH_RIGHT:
- Right_Point.x = event.getX();
- Right_Point.y = event.getY();
- invalidate();
- currentTouch = NONE;
- return true;
- case TOUCH_LEFT:
- Left_Point.x = event.getX();
- Left_Point.y = event.getY();
- invalidate();
- currentTouch = NONE;
- return true;
- case Inner_Touch:
- // Log.i("UP", ": Touch");
- // New_Translate_Point.x = event.getX();
- // New_Translate_Point.y = event.getY();
- float _x = event.getX() - Translate_Point.x;
- float _y = event.getY() - Translate_Point.y;
- // Log.i("ChangeX", ":" + _x);
- // Log.i("ChagneY", ":" + _y);
- // FindDifference(event.getX(), event.getY());
- Top_Point.x = Top_Point.x + _x;
- Top_Point.y = Top_Point.y + _y;
- Right_Point.x = Right_Point.x + _x;
- Right_Point.y = Right_Point.y + _y;
- Left_Point.x = Left_Point.x + _x;
- Left_Point.y = Left_Point.y + _y;
- Translate_Point.x = event.getX();
- Translate_Point.y = event.getY();
- invalidate();
- currentTouch = NONE;
- return true;
- }
- // touch = false;
- return false;
- }
- return false;
- }
- private void CreateLIstDialog() {
- Log.i("CreateLIstDialog", "");
- AlertDialog.Builder builder = new AlertDialog.Builder(_context);
- builder.setTitle("Select option ");
- ListView modeList = new ListView(_context);
- String[] stringArray = new String[] { "Change Color", "Delete" };
- ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(_context,
- android.R.layout.simple_list_item_1, android.R.id.text1,
- stringArray);
- modeList.setAdapter(modeAdapter);
- builder.setView(modeList);
- final Dialog dialog = builder.create();
- dialog.show();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement