Advertisement
RajaReddy

Untitled

Jul 14th, 2012
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.41 KB | None | 0 0
  1. package com.draw;
  2.  
  3. import android.app.AlertDialog;
  4. import android.app.Dialog;
  5. import android.content.Context;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.graphics.BitmapShader;
  9. import android.graphics.Canvas;
  10. import android.graphics.Color;
  11. import android.graphics.Paint;
  12. import android.graphics.Shader;
  13. import android.graphics.Paint.Style;
  14. import android.graphics.Path;
  15. import android.graphics.PointF;
  16. import android.graphics.RectF;
  17. import android.util.AttributeSet;
  18. import android.util.Log;
  19. import android.view.Display;
  20. import android.view.MotionEvent;
  21. import android.view.View;
  22. import android.view.ViewGroup;
  23. import android.view.WindowManager;
  24. import android.widget.ArrayAdapter;
  25. import android.widget.ListView;
  26. import android.widget.Toast;
  27.  
  28. /*
  29. * Project: Blocks With Friends
  30. * Creating Custom view ( Drawing ThreePoint's like Triangle
  31. * Developed By RajaReddy (ColorsSoft)
  32. * on 20/06/2012
  33. */
  34.  
  35. public class ThreePointDraw extends View {
  36.  
  37. private float top_right, top_left, left_right;
  38.  
  39. public ThreePointDraw(Context context) {
  40. super(context);
  41. _context = context;
  42. init();
  43. }
  44.  
  45. public ThreePointDraw(Context context, AttributeSet attrs) {
  46. super(context, attrs);
  47. _context = context;
  48. init();
  49. }
  50.  
  51. public ThreePointDraw(Context context, AttributeSet attrs, int defStyle) {
  52. super(context, attrs, defStyle);
  53. _context = context;
  54. init();
  55. }
  56.  
  57. private void init() {
  58.  
  59. /* Painting declaration's */
  60. Inner_Paint = new Paint(Paint.FILTER_BITMAP_FLAG);
  61. Inner_Paint.setStyle(Paint.Style.FILL_AND_STROKE);
  62. Inner_Paint.setStrokeJoin(Paint.Join.ROUND);
  63. Inner_Paint.setStrokeWidth(5);
  64.  
  65. /* set color for paint */
  66. Inner_Paint.setColor(Color.GREEN);
  67.  
  68. /* set bitmap for paint instead of color */
  69. Bitmap bm = BitmapFactory.decodeResource(getResources(),
  70. R.drawable.patterntwo);
  71. Shader mShader1 = new BitmapShader(bm, Shader.TileMode.REPEAT,
  72. Shader.TileMode.REPEAT);
  73. Inner_Paint.setShader(mShader1);
  74.  
  75. bm.recycle();
  76.  
  77. Lines_Paint = new Paint();
  78. Lines_Paint.setColor(Color.RED);
  79. Lines_Paint.setStyle(Style.STROKE);
  80. Lines_Paint.setStrokeWidth(5);
  81. Lines_Paint.setAntiAlias(true);
  82.  
  83. Points_Paint = new Paint();
  84. Text_Paint = new Paint();
  85. Angle_Paint = new Paint();
  86.  
  87. /* Main points */
  88. Top_Point = new PointF(65, 50);
  89. Left_Point = new PointF(10, 130);
  90. Right_Point = new PointF(120, 130);
  91.  
  92. /* Required points */
  93. point_on_LeftTop = new PointF(0, 0);
  94. point_on_LeftRight = new PointF(0, 0);
  95. point_on_RightTop = new PointF(0, 0);
  96. point_on_RightLeft = new PointF(0, 0);
  97. point_on_TopRight = new PointF(0, 0);
  98. point_on_TopLeft = new PointF(0, 0);
  99. Translate_Point = new PointF(0, 0);
  100.  
  101. CreateTouch_PointsFor_Pulling();
  102. Angle_Paint_Colors();
  103.  
  104. setOnLongClickListener(new OnLongClickListener() {
  105. public boolean onLongClick(View v) {
  106. ViewGroup parent = (ViewGroup) getParent();
  107. int i = 0;
  108. for (; i < parent.getChildCount(); i++) {
  109. if (parent.getChildAt(i) == ThreePointDraw.this) {
  110. break;
  111. }
  112. }
  113. if (i < parent.getChildCount()) {
  114. Toast.makeText(getContext(), "child index is: " + i,
  115. Toast.LENGTH_SHORT).show();
  116. }
  117. return true;
  118. }
  119. });
  120. }
  121. /* On Draw Override function for painting on the screen */
  122. @Override
  123. public void onDraw(Canvas canvas) {
  124.  
  125. if (canvas == offscreen) {
  126. super.onDraw(offscreen);
  127. }
  128.  
  129. _canvas = canvas;
  130.  
  131. /* painting on inner part of the view */
  132. Path path = new Path();
  133. path.setFillType(Path.FillType.EVEN_ODD);
  134. path.moveTo(Top_Point.x, Top_Point.y);
  135. path.lineTo(Right_Point.x, Right_Point.y);
  136. path.lineTo(Left_Point.x, Left_Point.y);
  137. path.lineTo(Top_Point.x, Top_Point.y);
  138. path.close();
  139. canvas.drawPath(path, Inner_Paint);
  140.  
  141. // canvas.clipPath(path);
  142. /* draw the lines between points */
  143. canvas.drawLine(Top_Point.x, Top_Point.y, Right_Point.x, Right_Point.y,
  144. Lines_Paint);
  145. canvas.drawLine(Right_Point.x, Right_Point.y, Left_Point.x,
  146. Left_Point.y, Lines_Paint);
  147. canvas.drawLine(Left_Point.x, Left_Point.y, Top_Point.x, Top_Point.y,
  148. Lines_Paint);
  149.  
  150. /* draw the text at points for showing angles */
  151. canvas.drawText(String.valueOf(angle_top), Top_Point.x - 15,
  152. Top_Point.y - 15, Text_Paint);
  153. canvas.drawText(String.valueOf(angle_right), Right_Point.x - 15,
  154. Right_Point.y + 15, Text_Paint);
  155. canvas.drawText(String.valueOf(angle_left), Left_Point.x - 15,
  156. Left_Point.y + 15, Text_Paint);
  157.  
  158. /* drawing Oval for touch pulling (TouchListener) */
  159. canvas.drawOval(TopTouchArea, Points_Paint);
  160. canvas.drawOval(RightTouchArea, Points_Paint);
  161. canvas.drawOval(LeftTouchArea, Points_Paint);
  162.  
  163. /* creating the rectangles to draw arc */
  164. float radius = 20;
  165. final RectF oval_left = new RectF();
  166. oval_left.set(Left_Point.x - radius, Left_Point.y - radius,
  167. Left_Point.x + radius, Left_Point.y + radius);
  168. Path myPath1 = new Path();
  169.  
  170. float radius1 = 20;
  171. final RectF oval_Right = new RectF();
  172. oval_Right.set(Right_Point.x - radius1, Right_Point.y - radius1,
  173. Right_Point.x + radius1, Right_Point.y + radius1);
  174. Path myPath2 = new Path();
  175.  
  176. float radius2 = 20;
  177. final RectF oval_Top = new RectF();
  178. oval_Top.set(Top_Point.x - radius2, Top_Point.y - radius2, Top_Point.x
  179. + radius2, Top_Point.y + radius2);
  180. Path myPath3 = new Path();
  181.  
  182. /* calculate the starting angles to draw arc */
  183. int startAngle = (int) (180 / Math.PI * Math.atan2(point_on_LeftRight.y
  184. - Left_Point.y, point_on_LeftRight.x - Left_Point.x));
  185.  
  186. int startAngle1 = (int) (180 / Math.PI * Math.atan2(
  187. point_on_RightLeft.y - Right_Point.y, point_on_RightLeft.x
  188. - Right_Point.x));
  189.  
  190. int startAngle2 = (int) (180 / Math.PI * Math.atan2(point_on_TopRight.y
  191. - Top_Point.y, point_on_TopRight.x - Top_Point.x));
  192.  
  193. /* checking for point where it was */
  194. boolean _line = LineEquation_Left();
  195. if (_line)
  196. myPath1.arcTo(oval_left, startAngle, -(float) angle_left, true);
  197. else
  198. myPath1.arcTo(oval_left, startAngle, (float) angle_left, true);
  199. canvas.drawPath(myPath1, Angle_Paint);
  200.  
  201. boolean _line1 = LineEquation_Right();
  202. if (_line1)
  203. myPath2.arcTo(oval_Right, startAngle1, -(float) angle_right, true);
  204. else
  205. myPath2.arcTo(oval_Right, startAngle1, +(float) angle_right, true);
  206. canvas.drawPath(myPath2, Angle_Paint);
  207.  
  208. boolean _line2 = LineEquation_Top();
  209. if (_line2)
  210. myPath3.arcTo(oval_Top, startAngle2, -(float) angle_top, true);
  211. else
  212. myPath3.arcTo(oval_Top, startAngle2, +(float) angle_top, true);
  213. canvas.drawPath(myPath3, Angle_Paint);
  214.  
  215. /* draw text on the path between the points for showing distance value */
  216. Path pa_lt = new Path();
  217. pa_lt.moveTo(Left_Point.x, Left_Point.y);
  218. pa_lt.lineTo(Top_Point.x, Top_Point.y);
  219. canvas.drawTextOnPath(String.valueOf(top_left), pa_lt,
  220. (float) (top_left / (2.3)), 15f, Text_Paint);
  221.  
  222. Path pa_tr = new Path();
  223. pa_tr.moveTo(Top_Point.x, Top_Point.y);
  224. pa_tr.lineTo(Right_Point.x, Right_Point.y);
  225. canvas.drawTextOnPath(String.valueOf(top_right), pa_tr,
  226. (float) (top_right / (2.3)), 15f, Text_Paint);
  227.  
  228. Path pa_rl = new Path();
  229. pa_rl.moveTo(Left_Point.x, Left_Point.y);
  230. pa_rl.lineTo(Right_Point.x, Right_Point.y);
  231. canvas.drawTextOnPath(String.valueOf(left_right), pa_rl,
  232. (float) (left_right / (2.3)), 15f, Text_Paint);
  233.  
  234. }
  235. @Override
  236. public boolean onTouchEvent(MotionEvent event) {
  237. Log.i("Three", ": Touch");
  238. switch (event.getAction()) {
  239. // The user just put their finger down.
  240. // We check to see which corner the user is touching
  241. // And set our global, currentTouch, to the appropriate constant.
  242. case MotionEvent.ACTION_DOWN:
  243.  
  244. PointF NewP = new PointF(0, 0);
  245. NewP.x = event.getX();
  246. NewP.y = event.getY();
  247. boolean a = CheckForLineEquations(NewP, Top_Point, Left_Point,
  248. Right_Point);
  249.  
  250. // Log.i("inside", "--" + a);
  251. // NewPoint_InSide();
  252. // Log.i("X", "" + event.getX());
  253. // Log.i("Y", "" + event.getY());
  254.  
  255. if (TopTouchArea.contains(event.getX(), event.getY())) {
  256. currentTouch = TOUCH_TOP;
  257. } else if (RightTouchArea.contains(event.getX(), event.getY())) {
  258. currentTouch = TOUCH_RIGHT;
  259. } else if (LeftTouchArea.contains(event.getX(), event.getY())) {
  260. currentTouch = TOUCH_LEFT;
  261. } else if (a) {
  262. // Log.i("IN", ": inside");
  263. Translate_Point.x = event.getX();
  264. Translate_Point.y = event.getY();
  265. currentTouch = Inner_Touch;
  266. return true; // Return false if user touches none of the
  267. // corners
  268. } else {
  269. return false;
  270. }
  271.  
  272. return true; // Return true if the user touches one of the corners
  273. // Now we know which corner the user is touching.
  274. // When the user moves their finger, we update the point to the user
  275. // position and invalidate.
  276. case MotionEvent.ACTION_MOVE:
  277. CreateTouch_PointsFor_Pulling();
  278. CalculateAngles();
  279. FindPoint_OnLines();
  280. // touch = true;
  281. Angle_Paint_Colors();
  282. switch (currentTouch) {
  283. case TOUCH_TOP:
  284.  
  285. touch = true;
  286. Top_Point.x = event.getX();
  287. Top_Point.y = event.getY();
  288.  
  289. invalidate();
  290. return true;
  291. case TOUCH_RIGHT:
  292.  
  293. touch = true;
  294. Right_Point.x = event.getX();
  295. Right_Point.y = event.getY();
  296.  
  297. invalidate();
  298. return true;
  299. case TOUCH_LEFT:
  300.  
  301. touch = true;
  302. Left_Point.x = event.getX();
  303. Left_Point.y = event.getY();
  304.  
  305. invalidate();
  306. return true;
  307. case Inner_Touch:
  308.  
  309. touch = false;
  310. // Log.i("Move", ": Touch");
  311. // New_Translate_Point.x = event.getX();
  312. // New_Translate_Point.y = event.getY();
  313. float _x = event.getX() - Translate_Point.x;
  314. float _y = event.getY() - Translate_Point.y;
  315. // Log.i("ChangeX", ":" + _x);
  316. // Log.i("ChagneY", ":" + _y);
  317.  
  318. Top_Point.x = Top_Point.x + _x;
  319. Top_Point.y = Top_Point.y + _y;
  320. Right_Point.x = Right_Point.x + _x;
  321. Right_Point.y = Right_Point.y + _y;
  322. Left_Point.x = Left_Point.x + _x;
  323. Left_Point.y = Left_Point.y + _y;
  324.  
  325. Translate_Point.x = event.getX();
  326. Translate_Point.y = event.getY();
  327.  
  328. invalidate();
  329.  
  330. return true;
  331. }
  332.  
  333. // We returned true for all of the above cases, because we used the
  334. // event
  335. return false; // If currentTouch is none of the above cases, return
  336. // false
  337.  
  338. // Here the user lifts up their finger.
  339. // We update the points one last time, and set currentTouch to NONE.
  340. case MotionEvent.ACTION_UP:
  341.  
  342. // FindDifference();
  343. CreateTouch_PointsFor_Pulling();
  344. CalculateAngles();
  345. FindPoint_OnLines();
  346.  
  347. // FindDifference();
  348. touch = false;
  349. Angle_Paint_Colors();
  350. switch (currentTouch) {
  351.  
  352. case TOUCH_TOP:
  353. Top_Point.x = event.getX();
  354. Top_Point.y = event.getY();
  355.  
  356. invalidate();
  357. currentTouch = NONE;
  358. return true;
  359. case TOUCH_RIGHT:
  360. Right_Point.x = event.getX();
  361. Right_Point.y = event.getY();
  362.  
  363. invalidate();
  364. currentTouch = NONE;
  365. return true;
  366. case TOUCH_LEFT:
  367. Left_Point.x = event.getX();
  368. Left_Point.y = event.getY();
  369.  
  370. invalidate();
  371. currentTouch = NONE;
  372. return true;
  373. case Inner_Touch:
  374.  
  375. // Log.i("UP", ": Touch");
  376. // New_Translate_Point.x = event.getX();
  377. // New_Translate_Point.y = event.getY();
  378. float _x = event.getX() - Translate_Point.x;
  379. float _y = event.getY() - Translate_Point.y;
  380. // Log.i("ChangeX", ":" + _x);
  381. // Log.i("ChagneY", ":" + _y);
  382. // FindDifference(event.getX(), event.getY());
  383. Top_Point.x = Top_Point.x + _x;
  384. Top_Point.y = Top_Point.y + _y;
  385. Right_Point.x = Right_Point.x + _x;
  386. Right_Point.y = Right_Point.y + _y;
  387. Left_Point.x = Left_Point.x + _x;
  388. Left_Point.y = Left_Point.y + _y;
  389.  
  390. Translate_Point.x = event.getX();
  391. Translate_Point.y = event.getY();
  392. invalidate();
  393. currentTouch = NONE;
  394. return true;
  395. }
  396. // touch = false;
  397. return false;
  398. }
  399. return false;
  400. }
  401.  
  402. private void CreateLIstDialog() {
  403.  
  404. Log.i("CreateLIstDialog", "");
  405. AlertDialog.Builder builder = new AlertDialog.Builder(_context);
  406. builder.setTitle("Select option ");
  407.  
  408. ListView modeList = new ListView(_context);
  409. String[] stringArray = new String[] { "Change Color", "Delete" };
  410. ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(_context,
  411. android.R.layout.simple_list_item_1, android.R.id.text1,
  412. stringArray);
  413. modeList.setAdapter(modeAdapter);
  414.  
  415. builder.setView(modeList);
  416. final Dialog dialog = builder.create();
  417.  
  418. dialog.show();
  419.  
  420. }
  421. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement