Android各种图表设计

本文详细介绍了如何利用人工智能算法自动生成技术博客的标题、摘要、关键词与新标签的过程,旨在提高内容创建效率并增强博客吸引力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、界面控制

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="饼图"  android:onClick="bing"
    />
    
    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="柱状图"  android:onClick="zhu"
    />
    
    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="折线图"   android:onClick="zhexian"
    />
</LinearLayout>

二、主程序MainAct

package com.lee;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import com.lee.modle.Information;
/**
 * 
 * @author 
 * Patata丶
 * http://www.weibo.com/totome
 *
 */

public class MainAct extends Activity {

	ArrayList<Information>informations;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        informations = new ArrayList<Information>();
        //数据假设  初始化
        informations.add(new Information("福建", "7434832", "人"));
        informations.add(new Information("广东", "9434832", "人"));
        informations.add(new Information("浙江", "5434832", "人"));
        informations.add(new Information("江苏", "7436832", "人"));
        informations.add(new Information("香港", "7464832", "人"));
        informations.add(new Information("陕西", "6464832", "人"));
        informations.add(new Information("上海", "4534832", "人"));
        informations.add(new Information("北京", "9435832", "人"));
         
       
    }
    
    
    
    /**
     * 按键监听
     */
    public void bing(View view)
    {
    	Intent intent = new Intent(this, Pie_char.class);
		intent.putExtra("informations", informations);
		intent.putExtra("title", "人口数据");
		startActivity(intent);
    }
    
    public void zhu(View view)
    {
    	Intent intent = new Intent(this, Stacked.class);
		intent.putExtra("informations", informations);
		intent.putExtra("title", "人口数据");
		startActivity(intent);
    }
    
    public void zhexian(View view)
    {
    	Intent intent = new Intent(this, Zhexian.class);
		intent.putExtra("informations", informations);
		intent.putExtra("title", "人口数据");
		startActivity(intent);
    }               
}

三、操作类Information

package com.lee.modle;

import java.io.Serializable;
public class Information implements Serializable
{
	public String weidu; //名称

	public String dulian1; //数据

	public String bfb;  //百分比

	public String dw;  //单位
	public Information(String weidu, String dulian1, String dw)
	{
		super();
		this.weidu = weidu;
		this.dulian1 = dulian1;
		this.dw = dw;
	}

	public Information ()
	{
		
	}
	
}
四、饼图Pie_char

package com.lee;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.achartengine.ChartFactory;
import org.achartengine.model.CategorySeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;

import com.lee.modle.Information;




import android.R.integer;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
/**
 * 饼图
 * * Patata丶
 * http://www.weibo.com/totome
 *
 */
public class Pie_char extends Activity {
	
	private ArrayList<Information> list;
	private int[] colorsArr;
	private String title;

    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        initData();
        
       
        DefaultRenderer renderer = buildCategoryRenderer(colorsArr); //把分布的颜色传给渲染器
       /* renderer.setZoomButtonsVisible(true);
        renderer.setZoomEnabled(true);*/  //放大和缩小
        renderer.setChartTitleTextSize(20);
        //renderer.setInScroll(true);//设置滚动

//        View view = ChartFactory.getPieChartView(this, buildCategoryDataset("Project budget", values), renderer);
        //饼状图文字信息和对应的百分比
        View view = ChartFactory.getPieChartView(this, buildCategoryDataset("Project budget", list), renderer);
        view.setBackgroundColor(Color.BLACK);
        

        setContentView(view);

        
    }
    
    /**
     * 初始化数据
     */
    private void initData()
    {

    	//获取main传来的集合
    	list = (ArrayList<Information>) getIntent().getSerializableExtra("informations");
    	title = getIntent().getStringExtra("title");  //设置标题
    	 //把数据所需颜色复制到数组
    	 colorsArr = new int[list.size()];
    	 for (int i = 0; i < list.size(); i++)
		{
    		 colorsArr[i] = IConstant.colorLib[i];
		}
    	
    }
    
    /**
     * 把分布的颜色传给渲染器
     * @param colors
     * @return
     */
    protected DefaultRenderer buildCategoryRenderer(int[] colors) {
        DefaultRenderer renderer = new DefaultRenderer();
        renderer.setLabelsTextSize(15);
        renderer.setLegendTextSize(15);
        renderer.setMargins(new int[] { 20, 30, 15, 0 });
        renderer.setChartTitle(title);
        for (int color : colors) {
            SimpleSeriesRenderer r = new SimpleSeriesRenderer();
            r.setColor(color);
            renderer.addSeriesRenderer(r);
        }
        return renderer;
    }

    
    /**
     * 饼状图文字信息
     * @param title
     * @param values
     * @return
     */
    protected CategorySeries buildCategoryDataset(String title, ArrayList<Information> list) {
        CategorySeries series = new CategorySeries(title);

        //根据list值分配视图 颜色
        for (Information information : list)
		{
        	double num =  Double.parseDouble(information.dulian1);
        	series.add(information.weidu+ " (" + information.dulian1 +  information.dw +")" , num);
		}   
        return series;
    }
}

五、柱状图Stacked

package com.lee;

import java.util.ArrayList;

import org.achartengine.ChartFactory;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;

import com.lee.modle.Information;
/**
 * 柱状图
 * Patata丶
 * http://www.weibo.com/totome
 *
 */
public class Stacked extends Activity
{
	private ArrayList<Information> list;
	private String title;
	private double  maxValue = 0; //数据的最大值
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		initCompont();
		   View view = ChartFactory.getBarChartView(this, getBarDataset(list), getBarRenderer(list), Type.STACKED); //Type.STACKED
	        view.setBackgroundColor(Color.BLACK);
	        setContentView(view);


	}
	
	/**
	 * 初始化数据
	 * @param titles
	 * @return
	 */
	private void initCompont()
	{
		list = (ArrayList<Information>) getIntent().getSerializableExtra("informations");
		title = getIntent().getStringExtra("title");

		//算出所有数据的最大值
		for (Information information : list)
		{
			double value = Double.parseDouble(information.dulian1);
			if (value > maxValue)
			{
				maxValue = value;
			}	
			
		}
		maxValue = maxValue + (maxValue/8);   //让左边刻度线高出数字的最大值  
	}
	// 描绘器设置

	public XYMultipleSeriesRenderer getBarRenderer(ArrayList<Information> informations)
	{

		XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();

		// 通过SimpleSeriesDenderer设置描绘器的颜色

			SimpleSeriesRenderer r = new SimpleSeriesRenderer();
			r.setColor(Color.rgb(1, 128, 205)); //定义柱状图的颜色
			renderer.addSeriesRenderer(r);
	
		

		setChartSettings(renderer, informations);// 设置描绘器的其他属性

		return renderer;
	}

	private void setChartSettings(XYMultipleSeriesRenderer renderer, ArrayList<Information> informations )
	{

//		renderer.setChartTitle("个人收支表");// 设置柱图名称
//		renderer.setXTitle("名单");// 设置X轴名称
//		renderer.setYTitle("数量");// 设置Y轴名称

		renderer.setXAxisMin(0.5);// 设置X轴的最小值为0.5
		renderer.setXAxisMax(5.5);// 设置X轴的最大值为5
		renderer.setYAxisMin(0);// 设置Y轴的最小值为0
		renderer.setYAxisMax(maxValue);// 设置Y轴最大值为500
		renderer.setDisplayChartValues(true); // 设置是否在柱体上方显示值
		renderer.setShowGrid(true);// 设置是否在图表中显示网格
		renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数
		renderer.setBarSpacing(0.2);  //柱状间的间隔
		renderer.setZoomButtonsVisible(true);
		//为X轴的每个柱状图设置底下的标题 比如  福建 ,广东.....
		int count=1; 
		for (Information information : informations)
		{
			renderer.addXTextLabel(count,information.weidu); 
					   
			count++; 
		}   

		   
		

	}

	// 数据设置

	private XYMultipleSeriesDataset getBarDataset(ArrayList<Information> informations)
	{

		XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

		CategorySeries series = new CategorySeries(title + " (单位:" + informations.get(0).dw + ")");
		// 声明一个柱形图
		// 为柱形图添加值
		for (Information information : informations)
		{
			series.add(Double.parseDouble(information.dulian1));
		}

		dataset.addSeries(series.toXYSeries());// 添加该柱形图到数据设置列表
		
	


		return dataset;
	}

}

六、折线图Zhexian

package com.lee;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import com.lee.modle.Information;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
/**
 * 折线图
 * Patata丶
 * http://www.weibo.com/totome
 *
 */
public class Zhexian extends Activity
{
	private ArrayList<Information> list;
	private String title;
	private double maxValue = 0; //数据的最大值
	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        
	        initCompont();  //初始化组件
	        
	        String[] titles = new String[] {title};  //表示目前就一条折线信息
	        //List有几条数据
	        List<double[]> x = new ArrayList<double[]>();
	        //X轴所显示的数目  1,2,3,4,5....   1条数据有几个点信息
	        double[] xInfo = new double[list.size()];
	        int count = 1;
	       for (int i = 0; i < list.size(); i++)
	       {
	    	   xInfo[i] = count;
	    	   count++;
	       }
	       
	       
	        //折线数量  1
	        for (int i = 0; i < titles.length; i++) {
	            x.add(xInfo);
	        }
	       
	        //折线各个点的值
	        double[] xValue = new double[list.size()];
	        for (int i = 0; i < xValue.length; i++)
			{
	        	xValue[i] = Double.parseDouble(list.get(i).dulian1);
	        	//把数据最大值赋给maxValue
	        	if (xValue[i] > maxValue)
				{
	        		maxValue = xValue[i];
				}
	        	
			}
	    	maxValue = maxValue + (maxValue/8);
	    	
	        
	        List<double[]> values = new ArrayList<double[]>();
	        values.add(xValue);

	        int[] colors = new int[] { Color.CYAN};//折线的颜色
	        PointStyle[] styles = new PointStyle[] { PointStyle.DIAMOND};  //折线的样式
	        XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
	        int length = renderer.getSeriesRendererCount();
	        for (int i = 0; i < length; i++) {
	            ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
	        }
	        setChartSettings(renderer, title, "", "", 0.5, 12.5, -10, 40, Color.LTGRAY, Color.LTGRAY);

	        renderer.setZoomButtonsVisible(true);

	        View view = ChartFactory.getLineChartView(this, buildDataset(titles, x, values), renderer);
	        view.setBackgroundColor(Color.BLACK);
	        setContentView(view);
	    }

	    
		/**
		 * 初始化数据
		 * @param titles
		 * @return
		 */
		private void initCompont()
		{
			list = (ArrayList<Information>) getIntent().getSerializableExtra("informations");
			title = getIntent().getStringExtra("title");
			title = title + " (单位:" + list.get(0).dw + ")"; //处理null字符串
			
		}
	  


	    private XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {
	        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
	        setRenderer(renderer, colors, styles);
	        return renderer;
	    }

	    private void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {
	        renderer.setAxisTitleTextSize(16);
	        renderer.setChartTitleTextSize(20);
	        renderer.setLabelsTextSize(12);  //标注字
	        renderer.setLegendTextSize(15);
	        renderer.setPointSize(5f);
	        renderer.setMargins(new int[] { 20, 30, 15, 20 });
	        int length = colors.length;
	        for (int i = 0; i < length; i++) {
	            XYSeriesRenderer r = new XYSeriesRenderer();
	            r.setColor(colors[i]);
	            r.setPointStyle(styles[i]);
	            renderer.addSeriesRenderer(r);
	        }
	    }

	    private void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle, String yTitle, double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {
      
	        renderer.setYTitle("数量");// 设置Y轴名称

			renderer.setXAxisMin(0.5);// 设置X轴的最小值为0.5

			renderer.setXAxisMax(5.5);// 设置X轴的最大值为5

			renderer.setYAxisMin(0);// 设置Y轴的最小值为0

			renderer.setYAxisMax(maxValue);// 设置Y轴最大值为500

			renderer.setDisplayChartValues(true); // 设置是否在柱体上方显示值

			renderer.setShowGrid(true);// 设置是否在图表中显示网格

			renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数
			renderer.setBarSpacing(1);
	        renderer.setXLabels(0);// 设置X轴显示的刻度标签的个数
	        
	        int tempNum = 1;
	       for (Information information : list)
		{
	    	   renderer.addXTextLabel(tempNum,information.weidu); 
	    	   tempNum++;
		}

	    }

	    private XYMultipleSeriesDataset buildDataset(String[] titles, List<double[]> xValues, List<double[]> yValues) {
	        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
	        addXYSeries(dataset, titles, xValues, yValues, 0);
	        return dataset;
	    }

	    private void addXYSeries(XYMultipleSeriesDataset dataset, String[] titles, List<double[]> xValues, List<double[]> yValues, int scale) {
	        int length = titles.length;
	        for (int i = 0; i < length; i++) {
	            XYSeries series = new XYSeries(titles[i], scale);
	            double[] xV = xValues.get(i);
	            double[] yV = yValues.get(i);
	            int seriesLength = xV.length;
	            for (int k = 0; k < seriesLength; k++) {
	                series.add(xV[k], yV[k]);
	            }
	            dataset.addSeries(series);
	        }
	    }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值