首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

achartengine之折线图-简单用法(续二)-(动态刷新)图形嵌套在页面(有有关问题请大家帮忙看看)

2013-03-19 
achartengine之折线图---简单用法(续二)---(动态刷新)图形嵌套在页面(有问题请大家帮忙看看)(问题在文章的

achartengine之折线图---简单用法(续二)---(动态刷新)图形嵌套在页面(有问题请大家帮忙看看)

(问题在文章的最后,大致说来就是折线图,如果点的个数大于3个的时候,不是所有的点都显示对应的值的,这是为什么呢,本来以为是小问题,但两天了还没找到原因)

将前两天的折线图代码做了小量修改,形成一个类似于这样的功能(类似web页面的含有查询条件以及数据列表的功能):

页面布局:

页面A,页面B:页面A中只有一个按钮,B中有输入框和提交按钮,输入框用来输入数据。

业务流程:

1.点击A中的按钮,进入B中,此时B中没有输入数据,所以B中默认显示设置好的一个折线图,

2.在B的输入框中输入一系列以“逗号”分隔的数字,点击“确定”按钮,折线图刷新。

 

两个activity以及两个layout,代码如下:

 

package com.test.testlinechar;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class HandlerActivity extends Activity {private Button start;private Button endButton;private Button lineButton;Handler handler = new Handler();Runnable updateHandler = new Runnable() {@Overridepublic void run() {System.out.println("updateHandler");handler.postDelayed(updateHandler, 3000);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_handler);start = (Button) findViewById(R.id.start);endButton = (Button) findViewById(R.id.end);start.setOnClickListener(new StartClickLintener());endButton.setOnClickListener(new EndClickLintener());lineButton = (Button) findViewById(R.id.line);lineButton.setOnClickListener(new LineClickLintener());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubreturn super.onCreateOptionsMenu(menu);}class LineClickLintener implements OnClickListener{@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(HandlerActivity.this, Activity_01.class);startActivity(intent);}}}


以上和“折线图”相关的实际上只需要关注一个按钮“lineButton”

以下为布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.test.testlinechar.HandlerActivity" ><Button     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/start"    android:text="@string/start"    /><Button     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/end"    android:text="@string/end"    android:layout_alignRight="@id/start"    android:layout_alignParentRight="true"    /><Button     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_below="@id/end"    android:id="@+id/line"    android:text="@string/line"    /></RelativeLayout>


 

B页面代码如下:

package com.test.testlinechar;import java.lang.reflect.Type;import org.achartengine.ChartFactory;import org.achartengine.GraphicalView;import org.achartengine.chart.PieChart;import org.achartengine.chart.PointStyle;import org.achartengine.model.CategorySeries;import org.achartengine.model.XYMultipleSeriesDataset;import org.achartengine.model.XYSeries;import org.achartengine.renderer.DefaultRenderer;import org.achartengine.renderer.SimpleSeriesRenderer;import org.achartengine.renderer.XYMultipleSeriesRenderer;import org.achartengine.renderer.XYSeriesRenderer;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.content.Intent;import android.graphics.Color;import android.graphics.Paint.Align;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;public class Activity_01 extends Activity {private Button submit;private Button reset;private EditText editText;private  GraphicalView  Gview;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_activity_01);submit = (Button) findViewById(R.id.submit);submit.setOnClickListener(new SumbitClickListener());reset = (Button) findViewById(R.id.reset);editText = (EditText) findViewById(R.id.editOne);String testString = editText.getText().toString();double [] Ypoints = new double[]{5,4,6,3,5};;if(!"".equals(testString)&&testString!=null){String [] strings = testString.split(",");Ypoints = new double[strings.length];for(int i=0;i<strings.length;i++){Ypoints[i] = Integer.valueOf(strings[i]);}}lineView(Ypoints); }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}class SumbitClickListener implements OnClickListener{@Overridepublic void onClick(View v) {String tempString = editText.getText().toString();String [] tempStrings =null;if(tempString.contains(",")){tempStrings = tempString.split(",");}else if(tempString.contains(",")){tempStrings = tempString.split(",");}double []temppoints = new double[tempStrings.length];for(int i=0;i<tempStrings.length;i++){temppoints[i] = Integer.valueOf(tempStrings[i]);}lineView(temppoints);}}//折线图public void lineView(double [] Ypoints){//同样是需要数据dataset和视图渲染器rendererXYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset();XYSeries  series = new XYSeries("第一条线");String [] strs = new String [Ypoints.length];for(int i=0;i<Ypoints.length;i++){series.add(i+1, Ypoints[i]);strs[i] =(i+1)+"月";}        mDataset.addSeries(series);XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();//设置图表的X轴的当前方向mRenderer.setOrientation(XYMultipleSeriesRenderer.Orientation.HORIZONTAL);mRenderer.setXTitle("日期");//设置为X轴的标题mRenderer.setYTitle("价格");//设置y轴的标题mRenderer.setAxisTitleTextSize(20);//设置轴标题文本大小mRenderer.setChartTitle("价格走势图");//设置图表标题mRenderer.setChartTitleTextSize(30);//设置图表标题文字的大小mRenderer.setLabelsTextSize(18);//设置标签的文字大小mRenderer.setLegendTextSize(20);//设置图例文本大小mRenderer.setPointSize(10f);//设置点的大小mRenderer.setYAxisMin(0);//设置y轴最小值是0mRenderer.setYAxisMax(15);mRenderer.setYLabels(10);//设置Y轴刻度个数(貌似不太准确)mRenderer.setXAxisMax(strs.length+1);mRenderer.setShowGrid(true);//显示网格//将x标签栏目显示如:1,2,3,4替换为显示1月,2月,3月,4月for(int i=0;i<strs.length;i++){mRenderer.addXTextLabel(i+1, strs[i]);}mRenderer.setXLabels(0);//设置只显示如1月,2月等替换后的东西,不显示1,2,3等mRenderer.setMargins(new int[] { 20, 30, 15, 20 });//设置视图位置      XYSeriesRenderer r = new XYSeriesRenderer();//(类似于一条线对象)        r.setColor(Color.BLUE);//设置颜色        r.setPointStyle(PointStyle.CIRCLE);//设置点的样式        r.setFillPoints(true);//填充点(显示的点是空心还是实心)        r.setDisplayChartValues(true);//将点的值显示出来        r.setChartValuesSpacing(10);//显示的点的值与图的距离        r.setChartValuesTextSize(25);//点的值的文字大小        r.setLineWidth(3);//设置线宽        mRenderer.addSeriesRenderer(r);             LinearLayout layout = (LinearLayout) findViewById(R.id.lineChar);        Gview = ChartFactory.getLineChartView(this, mDataset, mRenderer);        Gview.setBackgroundColor(Color.BLACK);       //移除原有的LinearLayout中的视图控件        layout.removeAllViewsInLayout();        layout.addView(Gview);}}


B对应布局文件如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.test.testlinechar.Activity_01" >    <!--  android:layout_above="将该控件的底部置于给定ID的控件之上" -->    <!--  android:layout_below="将该控件的底部置于给定ID的控件之下" -->    <!--  android:layout_toLeftOf="将该控件的右边缘和给定ID的控件的左边缘对齐" -->    <!--  android:layout_toRightOf="将该控件的左边缘和给定ID的控件的右边缘对齐" -->    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world"          android:id="@+id/textOne"         />    <EditText         android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:id="@+id/editOne"        android:layout_below="@id/textOne"        />          <Button           android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:id="@+id/submit"          android:layout_alignParentRight="true"          android:layout_below="@id/editOne"          android:text="@string/submit"          />      <Button           android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:id="@+id/reset"          android:layout_toLeftOf="@id/submit"          android:layout_below="@id/editOne"           android:text="@string/reset"          /> <LinearLayout android:id="@+id/lineChar"      android:orientation="horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/submit"     />   </RelativeLayout>


效果图如下:

1.

 

achartengine之折线图-简单用法(续二)-(动态刷新)图形嵌套在页面(有有关问题请大家帮忙看看)

2.点击“折线图”,进入默认页面如图:

achartengine之折线图-简单用法(续二)-(动态刷新)图形嵌套在页面(有有关问题请大家帮忙看看)

 

3.在输入框中输入数据,点击“确定”按钮,如图:

achartengine之折线图-简单用法(续二)-(动态刷新)图形嵌套在页面(有有关问题请大家帮忙看看)

 

以上,图形根据输入的数据动态的更新了,但是还有一个小问题,当输入的数字个数为4个的时候,点的附近没有都显示“值”,

当输入的数据个数为3个的时候,点的值都显示了,可能是那个地方的设置要调整吧,我想这个都是小问题了,先就到这里。

热点排行