Note that there are some explanatory texts on larger screens.

plurals
  1. POdrawArc not drawing properly when startAngle > endAngle in android
    primarykey
    data
    text
    <p>I am trying to draw an arc between two points in a circle using touch listener. Here is my code:</p> <pre><code>public class MainActivity extends Activity implements OnTouchListener { ImageView whiteCircle, centreCircle, slideArcFrame; int xStart = 0, yStart = 0, xEnd = 0, yEnd = 0, centerIx = 0, centerIy = 0; Bitmap output; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); whiteCircle = (ImageView) findViewById(R.id.centerImageWhite); centreCircle = (ImageView) findViewById(R.id.centerImage2); slideArcFrame = (ImageView) findViewById(R.id.centerImage); slideArcFrame.setOnTouchListener(this); slideArcFrame.setDrawingCacheEnabled(true); slideArcFrame.measure( MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); slideArcFrame.layout(0, 0, slideArcFrame.getMeasuredWidth(), slideArcFrame.getMeasuredHeight()); slideArcFrame.buildDrawingCache(true); output = Bitmap.createBitmap(slideArcFrame.getDrawingCache()); centerIx = 100; centerIy = 100; } @Override public boolean onTouch(View arg0, MotionEvent arg1) { if (arg1.getAction() == MotionEvent.ACTION_DOWN) { xStart = (int) arg1.getX(); yStart = (int) arg1.getY(); } if (arg1.getAction() == MotionEvent.ACTION_MOVE) { xEnd = (int) arg1.getX(); yEnd = (int) arg1.getY(); drawArc(); } if (arg1.getAction() == MotionEvent.ACTION_UP) { xEnd = (int) arg1.getX(); yEnd = (int) arg1.getY(); } return true; } private void drawArc() { Bitmap outp = Bitmap.createBitmap(output.getWidth(), output.getHeight(), Config.ARGB_8888); Canvas can = new Canvas(outp); final Paint paint = new Paint(); RectF rect = new RectF(0, 0, output.getWidth(), output.getHeight()); can.drawARGB(0, 0, 0, 0); paint.setAntiAlias(true); paint.setColor(getResources().getColor(R.color.white)); double quadXS, quadYS, quadXE, quadYE; double quadrantS = 0, quadrantE = 0; quadXS = xStart - centerIx; quadYS = yStart - centerIy; quadXE = xEnd - centerIx; quadYE = yEnd - centerIy; if (quadXS &gt;= 0 &amp;&amp; quadYS &gt;= 0) quadrantS = 1; if (quadXS &lt; 0 &amp;&amp; quadYS &gt;= 0) quadrantS = 2; if (quadXS &lt; 0 &amp;&amp; quadYS &lt; 0) quadrantS = 3; if (quadXS &gt;= 0 &amp;&amp; quadYS &lt; 0) quadrantS = 4; if (quadXE &gt;= 0 &amp;&amp; quadYE &gt;= 0) quadrantE = 1; if (quadXE &lt; 0 &amp;&amp; quadYE &gt;= 0) quadrantE = 2; if (quadXE &lt; 0 &amp;&amp; quadYE &lt; 0) quadrantE = 3; if (quadXE &gt;= 0 &amp;&amp; quadYE &lt; 0) quadrantE = 4; double startAngle = 0, endAngle = 0; if (quadrantS == 1) { startAngle = Math.toDegrees(Math.atan((double) (quadYS) / quadXS)); } if (quadrantS == 2) { startAngle = 180 - Math.toDegrees(Math.atan((double) (quadYS) / -quadXS)); } if (quadrantS == 3) { startAngle = 180 + Math.toDegrees(Math.atan((double) (-quadYS) / -quadXS)); } if (quadrantS == 4) { startAngle = 360 - Math.toDegrees(Math.atan((double) (-quadYS) / quadXS)); } if (quadrantE == 1) { endAngle = Math.toDegrees(Math.atan((double) (quadYE) / quadXE)); } if (quadrantE == 2) { endAngle = 180 - Math.toDegrees(Math.atan((double) (quadYE) / -quadXE)); } if (quadrantE == 3) { endAngle = 180 + Math.toDegrees(Math.atan((double) (-quadYE) / -quadXE)); } if (quadrantE == 4) { endAngle = 360 - Math.toDegrees(Math.atan((double) (-quadYE) / quadXE)); } can.drawArc(rect, (float) startAngle, (float) endAngle - (float) startAngle, true, paint); slideArcFrame.setImageBitmap(outp); } } </code></pre> <p>When the start angle is greater than end angle, the arc is drawn from end angle to start angle. Can anyone explain please?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload