Android three axes to draw real-time acceleration curve

Source: Internet
Author: User

 Public classGsensoractivityextendsActivityImplementsSensoreventlistener {Private Static FinalString TAG = "Gsensoractivity"; PrivateSensormanager Msensormanager; PrivateSensor Msensor; PrivateTextView textviewx; PrivateTextView Textviewy; PrivateTextView Textviewz; PrivateTextView TEXTVIEWF; Private floatMX, MY, MZ; Private LongLasttimestamp = 0;    Calendar Mcalendar; PrivateGraphicalview Chart; /**Number of Curves*/    Private Static Final intSERIES_NR = 1; PrivateTimeSeries series1; PrivateXymultipleseriesdataset DataSet1; Private floatAddY =-1; Private LongADDX; /**Time Data*/date[] XCache=NewDate[20]; /**Data*/    float[] Ycache =New float[20]; @Overrideprotected voidonCreate (Bundle savedinstancestate) {Super. OnCreate (savedinstancestate);        Setcontentview (R.layout.activity_gsensor); Textviewx=(TextView) Findviewbyid (R.ID.TEXTVIEW1); Textviewy=(TextView) Findviewbyid (R.ID.TEXTVIEW3); Textviewz=(TextView) Findviewbyid (R.ID.TEXTVIEW4); TEXTVIEWF=(TextView) Findviewbyid (R.ID.TEXTVIEW2); Lasttimestamp=System.currenttimemillis (); LinearLayout Layout=(LinearLayout) Findviewbyid (r.id.linearlayout); //Generate chartChart = Chartfactory.gettimechartview ( This, Getdatedemodataset (), Getdemorenderer (),"Hh:mm:ss"); Layout.addview (Chart,NewLayoutparams (Layoutparams.wrap_content, 380)); Msensormanager=(Sensormanager) Getsystemservice (Sensor_service); Msensor= Msensormanager.getdefaultsensor (Sensor.type_accelerometer);//type_gravity        if(NULL==Msensormanager) {LOG.D (TAG,"Deveice not support Sensormanager"); }        //parameter three, the accuracy of the detectionMsensormanager.registerlistener ( This, Msensor, sensormanager.sensor_delay_normal);//Sensor_delay_game    }        Private voidUpdatechart (floata) {//set length to        intLength =Series1.getitemcount (); if(Length >= 20) Length= 20; AddY=A; ADDX=NewDate (). GetTime (); //put the previous points in the cache         for(inti = 0; i < length; i++) {Xcache[i]=NewDate (Long) Series1.getx (i)); Ycache[i]= (float) series1.gety (i);        } series1.clear (); Series1.add (NewDate (ADDX), AddY);  for(intk = 0; K < length; k++) {Series1.add (xcache[k], ycache[k]); }        //add a new set of points in the data setdataset1.removeseries (series1);        Dataset1.addseries (SERIES1); //Curve Updatechart.invalidate (); }        /*** Set as Table style * *@return     */    Privatexymultipleseriesrenderer Getdemorenderer () {Xymultipleseriesrenderer renderer=NewXymultipleseriesrenderer (); Renderer.setcharttitle ("Real-time curve");//titleRenderer.setcharttitletextsize (20); Renderer.setxtitle ("Time");//X-Axis descriptionRenderer.setaxistitletextsize (16);        Renderer.setaxescolor (Color.Black); Renderer.setlabelstextsize (15);//axis scale Font sizeRenderer.setlabelscolor (Color.Black); Renderer.setlegendtextsize (15);//Curve DescriptionRenderer.setxlabelscolor (Color.Black); Renderer.setylabelscolor (0, Color.Black); Renderer.setshowlegend (false); Renderer.setmargins (New int[] {20, 30, 100, 0 }); Xyseriesrenderer R=NewXyseriesrenderer ();        R.setcolor (Color.Blue); R.setchartvaluestextsize (15); R.setchartvaluesspacing (3);        R.setpointstyle (pointstyle.circle); R.setfillbelowline (true);        R.setfillbelowlinecolor (Color.White); R.setfillpoints (true);        Renderer.addseriesrenderer (R);        Renderer.setmarginscolor (Color.White); Renderer.setpanenabled (false,false); Renderer.setshowgrid (true); Renderer.setyaxismax (50); Renderer.setyaxismin (-30); Renderer.setinscroll (true);//Adjust Size        returnrenderer; }    /*** Data Object * *@return     */    PrivateXymultipleseriesdataset Getdatedemodataset () {DataSet1=NewXymultipleseriesdataset (); Final intNR = 10; LongValue =NewDate (). GetTime (); Random R=NewRandom ();  for(inti = 0; i < SERIES_NR; i++) {series1=NewTimeSeries ("Demo series" + (i + 1));  for(intk = 0; K < nr; k++) {Series1.add (NewDate (value + k * 1000), 0);        } dataset1.addseries (SERIES1);        } log.i (TAG, dataset1.tostring ()); returnDataSet1; } @Override Public voidOnaccuracychanged (sensor sensor,intaccuracy) {} @Override Public voidonsensorchanged (Sensorevent event) {if(Event.sensor = =NULL) {            return; }        if(Event.sensor.getType () = =sensor.type_accelerometer) {            floatx = event.values[0]; floaty = event.values[1]; floatz = event.values[2]; Mcalendar=calendar.getinstance (); LongStamp = Mcalendar.gettimeinmillis ();//1393844912Textviewx.settext (string.valueof (x));            Textviewy.settext (string.valueof (y));            Textviewz.settext (String.valueof (z)); intSecond = Mcalendar.get (Calendar.second);// -            floatpx = Math.Abs (MX-x); floatPY = Math.Abs (MY-y); floatPZ = Math.Abs (MZ-z); LOG.D (TAG,"PX:" + px + "py:" + py + "PZ:" + PZ + "stamp:" + Stamp + "Second:" +second); floatMaxValue =getmaxvalue (px, py, PZ); if(MaxValue > 2 && (stamp-lasttimestamp) > 200) {Lasttimestamp=Stamp;Updatechart (x+y+z); Textviewf.settext ("Detect mobile phone in mobile ..."); }MX=x; MY=y; MZ=Z; }    }    /*** Get a maximum value * *@parampx *@paramPY *@paramPZ *@return     */     Public floatGetmaxvalue (floatPxfloatPyfloatPZ) {        floatMax = 0; if(px > py && px >PZ) {Max=px; } Else if(Py > px && py >PZ) {Max=py; } Else if(Pz > px && pz >py) {Max=PZ; }        returnMax; }}

Android three axes to draw real-time acceleration curve

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.