當前位置: 首頁>>代碼示例>>Java>>正文


Java XYMultipleSeriesRenderer.setShowGrid方法代碼示例

本文整理匯總了Java中org.achartengine.renderer.XYMultipleSeriesRenderer.setShowGrid方法的典型用法代碼示例。如果您正苦於以下問題:Java XYMultipleSeriesRenderer.setShowGrid方法的具體用法?Java XYMultipleSeriesRenderer.setShowGrid怎麽用?Java XYMultipleSeriesRenderer.setShowGrid使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在org.achartengine.renderer.XYMultipleSeriesRenderer的用法示例。


在下文中一共展示了XYMultipleSeriesRenderer.setShowGrid方法的12個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: setChartSettings

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
protected void setChartSettings(XYMultipleSeriesRenderer renderer, String xTitle, String yTitle,
                                double xMin, double xMax, double yMin, double yMax, int axesColor, int labelsColor) {
    //有關對圖表的渲染可參看api文檔
    renderer.setChartTitle(mTitle);
    renderer.setXTitle(xTitle);
    renderer.setYTitle(yTitle);
    renderer.setXAxisMin(xMin);
    renderer.setXAxisMax(xMax);
    renderer.setYAxisMin(yMin);
    renderer.setYAxisMax(yMax);
    renderer.setAxesColor(axesColor);
    renderer.setLabelsColor(labelsColor);
    renderer.setShowGrid(true);
    renderer.setGridColor(Color.GREEN);
    renderer.setXLabels(20);
    renderer.setYLabels(10);
    renderer.setXTitle("Time");
    renderer.setYTitle("  ");
    renderer.setYLabelsAlign(Paint.Align.RIGHT);
    renderer.setPointSize((float) 3);
    renderer.setShowLegend(false);
}
 
開發者ID:InnoFang,項目名稱:FamilyBond,代碼行數:23,代碼來源:HeartBeatFragment.java

示例2: configureRenderer

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
/**
 * Set some ChartView settings
 * 
 * @param XYRenderer
 */
private void configureRenderer(XYMultipleSeriesRenderer XYRenderer)
{
    XYRenderer.setAxesColor(Color.LTGRAY);
    XYRenderer.setLabelsColor(Color.LTGRAY);
    XYRenderer.setZoomEnabled(false, false);
    XYRenderer.setAxisTitleTextSize(16);
    XYRenderer.setChartTitleTextSize(20);
    XYRenderer.setLabelsTextSize(15);
    XYRenderer.setLegendTextSize(15);
    XYRenderer.setPointSize(5f);
    int margin = mContext.getResources().getDimensionPixelSize(R.dimen.chart_title_margin);
    XYRenderer.setMargins(new int[] {margin, margin, margin, margin});
    XYRenderer.setShowGrid(true);
    XYRenderer.setXLabelsAlign(Align.RIGHT);
    XYRenderer.setYLabels(20);
    // if in ScrollView, need set
    XYRenderer.setInScroll(true);
}
 
開發者ID:EspressifApp,項目名稱:IOT-Espressif-Android,代碼行數:24,代碼來源:EspChartFactory.java

示例3: setUpRenderer

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
private void setUpRenderer(Activity activity) {
    mRenderer = new XYMultipleSeriesRenderer();
    // We want to avoid black border
    mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00)); // transparent margins
    // Disable Pan on two axis
    mRenderer.setPanEnabled(true, false);
    mRenderer.setZoomEnabled(true, false);
    mRenderer.setLabelsTextSize(getDPI(15));
    mRenderer.setXLabelsColor(ContextCompat.getColor(activity,R.color.colorWhite));
    mRenderer.setYLabelsColor(0, ContextCompat.getColor(activity,R.color.colorWhite));
    mRenderer.setLabelsColor(ContextCompat.getColor(activity,R.color.colorWhite));
    mRenderer.setAxesColor(ContextCompat.getColor(activity,R.color.colorWhite));

    mRenderer.setShowGrid(true); // we show the grid
    mRenderer.setXLabels(0);
}
 
開發者ID:blackcj,項目名稱:GoogleFitExample,代碼行數:17,代碼來源:MultipleLineGraphs.java

示例4: customizeMultipleRender

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
protected XYMultipleSeriesRenderer customizeMultipleRender(){
	// Creating a XYMultipleSeriesRenderer to customize the whole chart
	XYMultipleSeriesRenderer rendererT = new XYMultipleSeriesRenderer();
       rendererT.setXLabels(0);  
       rendererT.setBackgroundColor(Color.BLACK);
       rendererT.setAxesColor(Color.WHITE);
       rendererT.setGridColor(Color.WHITE);
       rendererT.setShowGrid(true);
       rendererT.setApplyBackgroundColor(true);
       rendererT.setXTitle("Index");
       rendererT.setYTitle("Rebuffering ratio (%)");
       
       // Changing font size and point size
       rendererT.setAxisTitleTextSize(26); 
       rendererT.setLabelsTextSize(22);
       rendererT.setLegendTextSize(26);
       rendererT.setLegendHeight(80);
       rendererT.setPointSize(8);

       // Setting margins: above, left, below, right
       rendererT.setMargins(new int[] {0, 70, 100, 50});
       
       return rendererT;
}
 
開發者ID:leftdal,項目名稱:youslow,代碼行數:25,代碼來源:LineChartLast10.java

示例5: buildRenderer

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
private XYMultipleSeriesRenderer buildRenderer(Context context) {
    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
    renderer.setAxisTitleTextSize(16);
    renderer.setChartTitleTextSize(0);
    renderer.setLabelsTextSize(15);
    renderer.setLegendTextSize(20);
    renderer.setLegendHeight(22);
    renderer.setPointSize(5f);
    renderer.setMargins(new int[] { 20, 30, 15, 20 });
    renderer.setChartTitle("");
    renderer.setXTitle(context.getResources().getString(R.string.X));
    renderer.setYTitle(context.getResources().getString(R.string.Y));
    renderer.setXAxisMin(Graph.MIN_HEIGHT_X);
    renderer.setXAxisMax(Graph.MAX_HEIGHT_X);
    renderer.setYAxisMin(Graph.MIN_HEIGHT_Y);
    renderer.setYAxisMax(Graph.MAX_HEIGHT_Y);
    renderer.setAxesColor(Color.GRAY);
    renderer.setLabelsColor(Color.LTGRAY);
    renderer.setYLabelsAlign(Align.RIGHT);
    renderer.setXLabels(20);
    renderer.setYLabels(20);
    renderer.setPanEnabled(true);
    renderer.setZoomEnabled(true);
    renderer.setShowGrid(true);
    renderer.setXAxisBold(true);
    renderer.setYAxisBold(true);
    renderer.setZoomButtonsVisible(false);
    renderer.setExternalZoomEnabled(true);
    XYSeriesRenderer r = new XYSeriesRenderer();
    r.setColor(context.getResources().getColor(R.color.graph_color));
    r.setPointStyle(PointStyle.POINT);
    r.setLineWidth(4f);
    renderer.addSeriesRenderer(r);
    return renderer;
}
 
開發者ID:gigabytedevelopers,項目名稱:CalcMate,代碼行數:36,代碼來源:Graph.java

示例6: LineGraphView

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
/**
 * This constructor will set some properties of single chart and some properties of whole graph
 */
public LineGraphView() {
	//add single line chart mSeries
	mDataset.addSeries(mSeries);

	//XYSeriesRenderer is used to set the properties like chart color, style of each point, etc. of single chart
	final XYSeriesRenderer seriesRenderer = new XYSeriesRenderer();
	//set line chart color to Black
	seriesRenderer.setColor(Color.BLACK);
	//set line chart style to square points
	seriesRenderer.setPointStyle(PointStyle.SQUARE);
	seriesRenderer.setFillPoints(true);

	final XYMultipleSeriesRenderer renderer = mMultiRenderer;
	//set whole graph background color to transparent color
	renderer.setBackgroundColor(Color.TRANSPARENT);
	renderer.setMargins(new int[] { 50, 65, 40, 5 }); // top, left, bottom, right
	renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
	renderer.setAxesColor(Color.BLACK);
	renderer.setAxisTitleTextSize(24);
	renderer.setShowGrid(true);
	renderer.setGridColor(Color.LTGRAY);
	renderer.setLabelsColor(Color.BLACK);
	renderer.setYLabelsColor(0, Color.DKGRAY);
	renderer.setYLabelsAlign(Align.RIGHT);
	renderer.setYLabelsPadding(4.0f);
	renderer.setXLabelsColor(Color.DKGRAY);
	renderer.setLabelsTextSize(20);
	renderer.setLegendTextSize(20);
	//Disable zoom
	renderer.setPanEnabled(false, false);
	renderer.setZoomEnabled(false, false);
	//set title to x-axis and y-axis
	renderer.setXTitle("    Time (seconds)");
	renderer.setYTitle("               BPM");
	renderer.addSeriesRenderer(seriesRenderer);
}
 
開發者ID:runtimeco,項目名稱:Android-DFU-App,代碼行數:40,代碼來源:LineGraphView.java

示例7: execute

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
/**
 * Executes the chart demo.
 * 
 * @param context the context
 * @return the built intent
 */
public Intent execute(Context context) {
  XYMultipleSeriesDataset series = new XYMultipleSeriesDataset();
  XYValueSeries newTicketSeries = new XYValueSeries("New Tickets");
  newTicketSeries.add(1f, 2, 14);
  newTicketSeries.add(2f, 2, 12);
  newTicketSeries.add(3f, 2, 18);
  newTicketSeries.add(4f, 2, 5);
  newTicketSeries.add(5f, 2, 1);
  series.addSeries(newTicketSeries);
  XYValueSeries fixedTicketSeries = new XYValueSeries("Fixed Tickets");
  fixedTicketSeries.add(1f, 1, 7);
  fixedTicketSeries.add(2f, 1, 4);
  fixedTicketSeries.add(3f, 1, 18);
  fixedTicketSeries.add(4f, 1, 3);
  fixedTicketSeries.add(5f, 1, 1);
  series.addSeries(fixedTicketSeries);

  XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
  renderer.setAxisTitleTextSize(16);
  renderer.setChartTitleTextSize(20);
  renderer.setLabelsTextSize(15);
  renderer.setLegendTextSize(15);
  renderer.setMargins(new int[] { 20, 30, 15, 0 });
  XYSeriesRenderer newTicketRenderer = new XYSeriesRenderer();
  newTicketRenderer.setColor(Color.BLUE);
  renderer.addSeriesRenderer(newTicketRenderer);
  XYSeriesRenderer fixedTicketRenderer = new XYSeriesRenderer();
  fixedTicketRenderer.setColor(Color.GREEN);
  renderer.addSeriesRenderer(fixedTicketRenderer);

  setChartSettings(renderer, "Project work status", "Priority", "", 0.5, 5.5, 0, 5, Color.GRAY,
      Color.LTGRAY);
  renderer.setXLabels(7);
  renderer.setYLabels(0);
  renderer.setShowGrid(false);
  return ChartFactory.getBubbleChartIntent(context, series, renderer, "Project tickets");
}
 
開發者ID:ddanny,項目名稱:achartengine,代碼行數:44,代碼來源:ProjectStatusBubbleChart.java

示例8: customizeMultipleRender

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
protected XYMultipleSeriesRenderer customizeMultipleRender(){
	// Creating a XYMultipleSeriesRenderer to customize the whole chart
       XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
       renderer.setXLabels(0);  
       renderer.setBackgroundColor(Color.BLACK);
       renderer.setAxesColor(Color.WHITE);
       renderer.setGridColor(Color.WHITE);
       renderer.setShowGrid(true);
       renderer.setApplyBackgroundColor(true);
       renderer.setXTitle("Month");
       renderer.setYTitle("Avg. rebuffering ratio (%)");
       
       // Changing font size and point size
       renderer.setAxisTitleTextSize(26); 
       renderer.setLabelsTextSize(22);
       renderer.setLegendTextSize(26);
       renderer.setLegendHeight(80);
       renderer.setPointSize(8);
       
       // Setting margins: above, left, below, right
       renderer.setMargins(new int[] {0, 70, 100, 50});
       
       for(int i=0;i < xlabel.length;i++){
       	renderer.addXTextLabel(i+1, mMonth[i]);
       }
       return renderer;
}
 
開發者ID:leftdal,項目名稱:youslow,代碼行數:28,代碼來源:LineChart.java

示例9: execute

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
/**
 * Executes the chart demo.
 * 
 * @param context the context
 * @return the built intent
 */
public Intent execute(Context context) {
  String[] titles = new String[] { "Air temperature" };
  List<double[]> x = new ArrayList<double[]>();
  x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
  List<double[]> values = new ArrayList<double[]>();
  values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4, 26.1, 23.6, 20.3, 17.2,
      13.9 });
  int[] colors = new int[] { Color.BLUE, Color.YELLOW };
  PointStyle[] styles = new PointStyle[] { PointStyle.POINT, PointStyle.POINT };
  XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(2);
  setRenderer(renderer, colors, styles);
  int length = renderer.getSeriesRendererCount();
  for (int i = 0; i < length; i++) {
    XYSeriesRenderer r = (XYSeriesRenderer) renderer.getSeriesRendererAt(i);
    r.setLineWidth(3f);
  }
  setChartSettings(renderer, "Average temperature", "Month", "Temperature", 0.5, 12.5, 0, 32,
      Color.LTGRAY, Color.LTGRAY);
  renderer.setXLabels(12);
  renderer.setYLabels(10);
  renderer.setShowGrid(true);
  renderer.setXLabelsAlign(Align.RIGHT);
  renderer.setYLabelsAlign(Align.RIGHT);
  renderer.setZoomButtonsVisible(true);
  renderer.setPanLimits(new double[] { -10, 20, -10, 40 });
  renderer.setZoomLimits(new double[] { -10, 20, -10, 40 });
  renderer.setZoomRate(1.05f);
  renderer.setLabelsColor(Color.WHITE);
  renderer.setXLabelsColor(Color.GREEN);
  renderer.setYLabelsColor(0, colors[0]);
  renderer.setYLabelsColor(1, colors[1]);

  renderer.setYTitle("Hours", 1);
  renderer.setYAxisAlign(Align.RIGHT, 1);
  renderer.setYLabelsAlign(Align.LEFT, 1);
  renderer.setGridColor(colors[0], 0);
  renderer.setGridColor(colors[1], 1);

  XYMultipleSeriesDataset dataset = buildDataset(titles, x, values);
  x.clear();
  x.add(new double[] { -1, 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 });
  values.clear();
  values.add(new double[] { 4.3, 4.9, 5.9, 8.8, 10.8, 11.9, 13.6, 12.8, 11.4, 9.5, 7.5, 5.5 });
  addXYSeries(dataset, new String[] { "Sunshine hours" }, x, values, 1);

  Intent intent = ChartFactory.getCubicLineChartIntent(context, dataset, renderer, 0.3f,
      "Average temperature");
  return intent;
}
 
開發者ID:ddanny,項目名稱:achartengine,代碼行數:56,代碼來源:MultipleTemperatureChart.java

示例10: draw

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
@SuppressWarnings("unchecked")
public void draw() {
	ArrayList<String> dates;
	ArrayList<Double> readings;

	// assign the data passed to the intent
	dates = getIntent().getStringArrayListExtra("dates");
	readings = (ArrayList<Double>) getIntent().getSerializableExtra(
			"readings");
	title = getIntent().getStringExtra("test");

	// create a new time series for the graph
	TimeSeries series = new TimeSeries(title + " Results");

	// populate the series with data retrieved from the database
	for (int i = dates.size() - 1; i >= 0; i--) {
		// parse the date object to calendar date time
		try {
			c.setTime(sdf.parse(dates.get(i)));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// add the current point to the time series
		series.add(c.getTime(), readings.get(i));

	}

	XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
	dataset.addSeries(series); // initialize the set of data to be drawn

	// Now create the renderer to control how the chart looks like
	XYSeriesRenderer renderer = new XYSeriesRenderer();
	renderer.setLineWidth(4);
	renderer.setColor(Color.WHITE);

	// add point markers
	renderer.setPointStyle(PointStyle.CIRCLE);
	renderer.setPointStrokeWidth(3);
	renderer.setDisplayChartValues(true);

	XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
	mRenderer.addSeriesRenderer(renderer);

	// avoid black border
	mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00)); // transparent
																	// margins
	// Enable Pan on two axis
	mRenderer.setPanEnabled(true, true);
	mRenderer.setShowGrid(true); // show the grid
	mRenderer.setXTitle("Day");
	if (title.equals("HBA1C"))
		mRenderer.setYTitle("%");
	else
		mRenderer.setYTitle("mg/dl");
	mRenderer.setZoomButtonsVisible(true);

	GraphicalView chartView = ChartFactory.getTimeChartView(DrawGraph.this,
			dataset, mRenderer, "yyyy/MM/dd hh:mm aa");// combines the dataset with
												// the renderer and returns
												// a view
	
	
	LinearLayout chart_container = (LinearLayout) findViewById(R.id.Chart_layout);

	//set the created chart view to the linear layout of the layout created for the graph
	chart_container.addView(chartView, 0);

}
 
開發者ID:Falimbert,項目名稱:BgLogger,代碼行數:71,代碼來源:DrawGraph.java

示例11: setUpRenderer

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
private void setUpRenderer(Activity activity) {
    // Now we create the renderer
    XYSeriesRenderer mCurrentRenderer = new XYSeriesRenderer();
    mCurrentRenderer.setLineWidth(getDPI(2));
    mCurrentRenderer.setColor(activity.getResources().getColor(R.color.colorBarGraph));
    // Include low and max value
    mCurrentRenderer.setDisplayBoundingPoints(true);
    // we add point markers
    mCurrentRenderer.setPointStyle(PointStyle.CIRCLE);
    mCurrentRenderer.setPointStrokeWidth(getDPI(5));
    mCurrentRenderer.setShowLegendItem(false);

    // Creating XYSeriesRenderer to customize expenseSeries
    XYSeriesRenderer expenseRenderer = new XYSeriesRenderer();
    expenseRenderer.setColor(activity.getResources().getColor(R.color.colorBarGraph2));
    expenseRenderer.setPointStyle(PointStyle.POINT);
    expenseRenderer.setFillPoints(true);
    expenseRenderer.setLineWidth(getDPI(3));
    expenseRenderer.setShowLegendItem(false);

    mRenderer = new XYMultipleSeriesRenderer();
    mRenderer.addSeriesRenderer(mCurrentRenderer);
    mRenderer.addSeriesRenderer(expenseRenderer);
    // We want to avoid black border
    mRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00)); // transparent margins
    // Disable Pan on two axis
    mRenderer.setPanEnabled(true, false);
    mRenderer.setZoomEnabled(true, false);
    mRenderer.setLabelsTextSize(getDPI(15));
    mRenderer.setXLabelsColor(activity.getResources().getColor(R.color.colorWhite));
    mRenderer.setYLabelsColor(0, activity.getResources().getColor(R.color.colorWhite));
    mRenderer.setLabelsColor(activity.getResources().getColor(R.color.colorWhite));
    mRenderer.setAxesColor(activity.getResources().getColor(R.color.colorWhite));
    mRenderer.setBarSpacing(0.2);

    mRenderer.setShowGrid(true); // we show the grid
    mRenderer.setXLabels(0);

    // enable the chart click events
    mRenderer.setClickEnabled(true);
    mRenderer.setSelectableBuffer(10);
}
 
開發者ID:blackcj,項目名稱:GoogleFitExample,代碼行數:43,代碼來源:SingleBarGraphWithGoal.java

示例12: onCreate

import org.achartengine.renderer.XYMultipleSeriesRenderer; //導入方法依賴的package包/類
@Override
public void onCreate(Bundle savedInstanceState)
{
	super.onCreate(savedInstanceState);
	getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
	                     WindowManager.LayoutParams.FLAG_FULLSCREEN);

	// keep main display on?
	if(MainActivity.prefs.getBoolean("keep_screen_on", false))
	{
		getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
	}

	// prevent activity from falling asleep
	PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
	wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
		getString(R.string.app_name));
	wakeLock.acquire();

	// set up action bar
	ActionBar actionBar = getActionBar();
	if (actionBar != null)
	{
		actionBar.setDisplayShowTitleEnabled(true);
	}

	setTitle(R.string.chart);

	/* get PIDs to be shown */
	int positions[] = getIntent().getIntArrayExtra(POSITIONS);

	// set up overall chart properties
	sensorData = new XYMultipleSeriesDataset();
	renderer = new XYMultipleSeriesRenderer(positions.length);
	chartView = ChartFactory.getTimeChartView(this, sensorData, renderer, "H:mm:ss");
	// set up global renderer
	renderer.setXTitle(getString(R.string.time));
	renderer.setXLabels(5);
	renderer.setYLabels(5);
	renderer.setGridColor(Color.DKGRAY);
	renderer.setShowGrid(true);
	renderer.setFitLegend(true);
	renderer.setClickEnabled(false);
	// set up chart data
	setUpChartData(positions);
	// make chart visible
	setContentView(chartView);
	// limit selected PIDs to selection
	MainActivity.setFixedPids(pidNumbers);
	// if auto hiding selected ...
	if(MainActivity.prefs.getBoolean(MainActivity.PREF_AUTOHIDE,false))
	{
		// get autohide timeout [s]
		int timeout = Integer.valueOf(
			MainActivity.prefs.getString(MainActivity.PREF_AUTOHIDE_DELAY,"15") );
		// auto hide toolbar
		toolBarHider = new AutoHider( this,
		                              mHandler,
		                              MainActivity.MESSAGE_TOOLBAR_VISIBLE,
		                              timeout * 1000);
		toolBarHider.start(1000);
		// wake up on touch
		chartView.setOnTouchListener(toolBarHider);
	}
}
 
開發者ID:fr3ts0n,項目名稱:AndrOBD,代碼行數:66,代碼來源:ChartActivity.java


注:本文中的org.achartengine.renderer.XYMultipleSeriesRenderer.setShowGrid方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。