Note that there are some explanatory texts on larger screens.

plurals
  1. POGetting all points in Path in android - FingerPaint.java
    primarykey
    data
    text
    <p>I tried to get all the x,y coordinates that are drawn in the path on the canvas. But i couldn't get the points. I am getting only a few points. Why is that?</p> <p>Is there any way i can get all the x and y points?</p> <p>I use FingerPaint.java as a starting point.</p> <p><a href="http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.html" rel="nofollow">Link to Original FingerPaint.java</a></p> <p>Here is the code i modified and using:</p> <pre><code>package com.schogini.whiteboard; import java.util.ArrayList; import java.util.StringTokenizer; import android.app.Activity; import android.content.Context; import android.graphics.*; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; //import android.widget.Toast; public class FingerPaint extends Activity implements ColorPickerDialog.OnColorChangedListener { //color - ARGB int a = 255; int r = 255; int g = 0; int b = 0; //erase Flag boolean eraseFlag=false; //Internet Posting static String toSend; static String parseStr; //array for storing x,y,r,g,b,a static ArrayList&lt;String&gt; rArray,gArray,bArray,alphaArray,xPointArray,yPointArray; //ArrayList&lt;String&gt; rArray_in,gArray_in,bArray_in,alphaArray_in,xPointArray_in,yPointArray_in; //Drawing types private static Paint mPaint; private MaskFilter mEmboss; private MaskFilter mBlur; //touch - Path Coordinates private static float mX; private static float mY; //MyView object MyView m; //point populate float dx,dy,distance; int dd,ii; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); m = new MyView(FingerPaint.this); setContentView(m); //move to appropriate module rArray = new ArrayList&lt;String&gt;(); gArray = new ArrayList&lt;String&gt;(); bArray = new ArrayList&lt;String&gt;(); alphaArray = new ArrayList&lt;String&gt;(); xPointArray = new ArrayList&lt;String&gt;(); yPointArray = new ArrayList&lt;String&gt;(); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setColor(0xFFFF0000); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); //width of the drawing brush mPaint.setStrokeWidth(12); mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f); mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL); } public void parsing(String str22){ //example string received from server // parseStr = "255,0,0,1.0,88.0,100.0||255,0,0,1.0,88.0,101.0||255,0,0,1.0,88.0,102.0||255,0,0,1.0,88.0,103.0||255,0,0,1.0,88.0,104.0||255,0,0,1.0,88.0,105.0||255,0,0,1.0,88.0,106.0||255,0,0,1.0,88.0,107.0||255,0,0,1.0,88.0,108.0," + // "||255,0,0,1.0,88.0,109.0||255,0,0,1.0,88.0,110.0||255,0,0,1.0,88.0,111.0||255,0,0,1.0,88.0,112.0||255,0,0,1.0,88.0,113.0||255,0,0,1.0,88.0,114.0||255,0,0,1.0,88.0,115.0||255,0,0,1.0,88.0,116.0||255,0,0,1.0,88.0,117.0," + // "||255,0,0,1.0,88.0,118.0||255,0,0,1.0,88.0,119.0||255,0,0,1.0,88.0,120.0||255,0,0,1.0,80.0,100.0||255,0,0,1.0,81.0,100.0||255,0,0,1.0,82.0,100.0||255,0,0,1.0,83.0,100.0||255,0,0,1.0,84.0,100.0||255,0,0,1.0,85.0,100.0," + // "||255,0,0,1.0,86.0,100.0||255,0,0,1.0,87.0,100.0||255,0,0,1.0,88.0,100.0||255,0,0,1.0,89.0,100.0||255,0,0,1.0,91.0,100.0||255,0,0,1.0,92.0,100.0||255,0,0,1.0,93.0,100.0||255,0,0,1.0,94.0,100.0||255,0,0,1.0,95.0,100.0," + // "||255,0,0,1.0,96.0,100.0||255,0,0,1.0,97.0,100.0||255,0,0,1.0,98.0,100.0||255,0,0,1.0,99.0,100.0||255,0,0,1.0,100.0,100.0||255,0,0,1.0,101.0,100.0||255,0,0,1.0,102.0,100.0||255,0,0,1.0,103.0,100.0,"; parseStr="255,0,0,255,85.351585,90.17996||255,0,0,255,85.351585,90.17996||255,0,0,255,123.97784,80.883064||255,0,0,255,164.47311,71.58616||255,0,0,255,182.22874,65.543175||255,0,0,255,233.9381,48.3439||255,0,0,255,247.95567,42.30091||255,0,0,255,252.62822,40.441532||255,0,0,255,252.62822,40.441532||255,0,0,255,86.9091,167.34427||255,0,0,255,86.9091,167.34427||255,0,0,255,86.9091,167.34427||255,0,0,255,151.70154,133.41057||255,0,0,255,190.3278,118.07068||255,0,0,255,235.18411,98.54717||255,0,0,255,248.57867,92.03935||255,0,0,255,256.36627,89.71512||255,0,0,255,257.30078,89.250275||255,0,0,255,257.30078,89.250275||255,0,0,255,82.548065,277.97742||255,0,0,255,82.548065,277.97742||255,0,0,255,82.548065,277.97742||255,0,0,255,116.50179,258.91876||255,0,0,255,152.63605,240.7898||255,0,0,255,209.95244,215.68816||255,0,0,255,239.23363,199.41858||255,0,0,255,249.8247,192.4459||255,0,0,255,261.35028,186.86777||255,0,0,255,261.9733,186.86777||255,0,0,255,261.9733,186.86777||255,0,0,255,50.77485,53.92204||255,0,0,255,50.77485,53.92204||255,0,0,255,50.77485,53.92204||255,0,0,255,50.77485,53.92204||255,0,0,255,48.905834,62.7541||255,0,0,255,39.56077,133.87541||255,0,0,255,44.856304,185.93808||255,0,0,255,53.578365,266.82114||255,0,0,255,53.578365,287.27435||255,0,0,255,51.70935,301.6845||255,0,0,255,51.39785,303.07904||255,0,0,255,51.086346,303.5439||255,0,0,255,51.086346,303.5439||255,0,0,255,90.02411,362.57922||255,0,0,255,88.155106,355.14172||255,0,0,255,109.02575,317.0244||255,0,0,255,133.01141,323.53226||255,0,0,255,155.43958,340.26666||255,0,0,255,166.65363,344.91513||255,0,0,255,185.03226,338.4073||255,0,0,255,193.13133,326.78616||255,0,0,255,210.26395,292.38763||255,0,0,255,228.01956,296.10638||255,0,0,255,259.7928,283.09073||255,0,0,255,266.33432,263.5672||255,0,0,255,267.58032,258.91876||255,0,0,255,269.76086,256.1297||255,0,0,255,271.94138,255.20001||255,0,0,255,284.71295,248.22733||255,0,0,255,294.3695,232.42259||255,0,0,255,297.48453,212.8991||255,0,0,255,297.48453,212.8991||255,0,0,255,101.86119,202.67252||255,0,0,255,101.86119,202.67252||255,0,0,255,101.86119,202.67252||255,0,0,255,113.07527,194.77013||255,0,0,255,141.73346,178.9654||255,0,0,255,144.8485,179.43024||255,0,0,255,166.96513,192.4459||255,0,0,255,170.70317,195.23497||255,0,0,255,193.75432,195.69983||255,0,0,255,201.85338,185.93808||255,0,0,255,212.75597,146.42624||255,0,0,255,217.4285,136.19965||255,0,0,255,231.44609,135.26996||255,0,0,255,241.41415,136.66449||255,0,0,255,250.13622,136.19965||255,0,0,255,279.41742,128.76212||255,0,0,255,312.12512,100.406555||255,0,0,255,312.12512,100.406555||255,0,0,255,92.20462,52.527508||255,0,0,255,92.20462,52.527508||255,0,0,255,159.48909,44.160294||255,0,0,255,186.90128,34.398544||255,0,0,255,242.97165,20.918034||255,0,0,255,269.13785,13.48051||255,0,0,255,288.76245,11.62113||255,0,0,255,288.76245,11.62113,"; StringTokenizer tokens = new StringTokenizer(parseStr, "||"); while(tokens.hasMoreTokens()) { String second = tokens.nextToken(); StringTokenizer tempTokens = new StringTokenizer(second, ","); int index = 0; while(tempTokens.hasMoreTokens()) { String splitStr = tempTokens.nextToken(); switch (index%6) { case 0: rArray.add(splitStr); break; case 1: gArray.add(splitStr); break; case 2: bArray.add(splitStr); break; case 3: alphaArray.add(splitStr); break; case 4: xPointArray.add(splitStr); break; case 5: yPointArray.add(splitStr); break; default: break; } index++; Log.v("String44"," value = "+splitStr); } } m.redraw(); } public void colorChanged(int color) { mPaint.setColor(color); //method to convert integer color to r g b a b = (color)&amp;0xFF; g = (color&gt;&gt;8)&amp;0xFF; r = (color&gt;&gt;16)&amp;0xFF; a = Math.round(((color&gt;&gt;&gt;24)/255)*10); } public class MyView extends View { private Bitmap mBitmap; private Canvas mCanvas; public Path mPath; public Paint mBitmapPaint; public MyView(Context c) { super(c); // reading screen size (for device Independence) DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); mBitmap = Bitmap.createBitmap(displaymetrics.widthPixels,displaymetrics.heightPixels, Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mBitmap); mPath = new Path(); mBitmapPaint = new Paint(Paint.DITHER_FLAG); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { //background -- White canvas.drawColor(0xFFFFFFFF); //draw the bitmap from 0,0 the firstpoint in device's screen canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, mPaint); } public void touch_start(float x, float y) { //reset touch so that a new path is to be drawn mPath.reset(); mPath.moveTo(x, y); mX = x; mY = y; } public void touch_move(float x, float y) { mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); //point tracing tracePoints((int)x, (int)y,(int)mX,(int)mY); mX = x; mY = y; } public void touch_up() { mPath.lineTo(mX, mY); // commit the path to our offscreen mCanvas.drawPath(mPath, mPaint); // kill this so we don't double draw mPath.reset(); } public void arrayPopulate(float atx,float aty){ if(eraseFlag==false){ //entering points into arrayLists xPointArray.add(""+atx); yPointArray.add(""+aty); //add color as well alphaArray.add(""+a); rArray.add(""+r); gArray.add(""+g); bArray.add(""+b); // if(toSend==null){ // toSend=""+r+","+g+","+b+","+a+","+atx+","+aty+"||"; // } // else{ // toSend+=""+r+","+g+","+b+","+a+","+atx+","+aty+"||"; // } //add data to a queue for sending to server // Log.v("touch", toSend); //send data here to server //eraseFlag is true ends } } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y); arrayPopulate(x, y); invalidate(); break; case MotionEvent.ACTION_MOVE: touch_move(x, y); invalidate(); break; case MotionEvent.ACTION_UP: touch_up(); arrayPopulate(x, y); invalidate(); break; } return true; } public void redraw() { int arraysize = FingerPaint.rArray.size(); int index=0; float xx,yy; //setting properties of tPaint Paint tPaint= new Paint(); tPaint.setAntiAlias(true); tPaint.setDither(true); tPaint.setStyle(Paint.Style.STROKE); tPaint.setStrokeJoin(Paint.Join.ROUND); tPaint.setStrokeCap(Paint.Cap.ROUND); tPaint.setColor(-16777216); tPaint.setStrokeWidth(12); while(index&lt;arraysize){ //tPaint.setARGB(Integer.parseInt(alphaArray.get(0)), Integer.parseInt(rArray.get(0)), Integer.parseInt(gArray.get(0)), Integer.parseInt(bArray.get(0))); //tPaint.setColor(Color.argb(Integer.parseInt(alphaArray.get(0)), Integer.parseInt(rArray.get(0)), Integer.parseInt(gArray.get(0)), Integer.parseInt(bArray.get(0)))); xx=Float.parseFloat(xPointArray.get(index)); yy=Float.parseFloat(yPointArray.get(index)); m.mCanvas.drawPoint(xx,yy,tPaint); m.invalidate(); index++; Log.d("__REDRAW__", "X="+xx+" Y="+yy); } } } //creating Options Menu - Inflater @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } //Option Menu Selection - Actions @Override public boolean onOptionsItemSelected(MenuItem item) { mPaint.setXfermode(null); mPaint.setAlpha(255); switch (item.getItemId()) { case R.id.COLOR: this.eraseFlag=false; new ColorPickerDialog(this, this, mPaint.getColor()).show(); return true; case R.id.EMBOSS: this.eraseFlag=false; if (mPaint.getMaskFilter() != mEmboss) { mPaint.setMaskFilter(mEmboss); } else { mPaint.setMaskFilter(null); } return true; case R.id.BLUR: this.eraseFlag=false; if (mPaint.getMaskFilter() != mBlur) { mPaint.setMaskFilter(mBlur); } else { mPaint.setMaskFilter(null); } return true; case R.id.ERASE: //for toggle detection this.eraseFlag=true; //reset blurr &amp; Emboss mPaint.setMaskFilter(null); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); return true; case R.id.REDRAW: this.eraseFlag=false; //redraw the drawn points m.redraw(); return true; } return super.onOptionsItemSelected(item); } //Bressenham's mid-point algorithm for finding all points between any two points --- Straight line public void tracePoints(int xxx,int yyy,int x2, int y2) { int w = x2 - xxx ; int h = y2 - yyy ; int dx1 = 0, dy1 = 0, dx2 = 0, dy2 = 0 ; if (w&lt;0) dx1 = -1 ; else if (w&gt;0) dx1 = 1 ; if (h&lt;0) dy1 = -1 ; else if (h&gt;0) dy1 = 1 ; if (w&lt;0) dx2 = -1 ; else if (w&gt;0) dx2 = 1 ; int longest = Math.abs(w) ; int shortest = Math.abs(h) ; if (!(longest&gt;shortest)) { longest = Math.abs(h) ; shortest = Math.abs(w) ; if (h&lt;0) dy2 = -1 ; else if (h&gt;0) dy2 = 1 ; dx2 = 0 ; } int numerator = longest &gt;&gt; 1 ; for (int i=0;i&lt;=longest;i++) { m.arrayPopulate((float)xxx,(float)yyy) ; numerator += shortest ; if (!(numerator&lt;longest)) { numerator -= longest ; xxx += dx1 ; yyy += dy1 ; } else { xxx += dx2 ; yyy += dy2 ; } } } } </code></pre>
    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.
 

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