Android 柱状图
生活随笔
收集整理的這篇文章主要介紹了
Android 柱状图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
依賴
compile 'org.xclcharts:lib:2.4'自定義view1
/** * @ClassName DemoView * @Description 各個例子view的view基類 */ public class DemoView extends ChartView{public DemoView(Context context) {super(context); // TODO Auto-generated constructor stub }public DemoView(Context context, AttributeSet attrs){super(context, attrs); }public DemoView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle); }//Demo中bar chart所使用的默認偏移值。 //偏移出來的空間用于顯示tick,axistitle.... protected int[] getBarLnDefaultSpadding(){int [] ltrb = new int[4]; ltrb[0] = DensityUtil.dip2px(getContext(), 40); //left ltrb[1] = DensityUtil.dip2px(getContext(), 60); //top ltrb[2] = DensityUtil.dip2px(getContext(), 20); //right ltrb[3] = DensityUtil.dip2px(getContext(), 40); //bottom return ltrb; }protected int[] getPieDefaultSpadding(){int [] ltrb = new int[4]; ltrb[0] = DensityUtil.dip2px(getContext(), 20); //left ltrb[1] = DensityUtil.dip2px(getContext(), 65); //top ltrb[2] = DensityUtil.dip2px(getContext(), 20); //right ltrb[3] = DensityUtil.dip2px(getContext(), 20); //bottom return ltrb; }@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh); }}自定義view2
/** * @ClassName SpinnerBarChart01View * @Description 柱形圖同數據源不同柱形圖切換的例子 */ public class SpinnerBarChart01View extends DemoView {private String TAG = "SpinnerBarChart01View"; private int mChartStyle = 0; private int mOffsetHeight = 0; private BarChart mChart = null; //標簽軸 private List<String> chartLabels = new LinkedList<String>(); private List<BarData> chartData = new LinkedList<BarData>(); public SpinnerBarChart01View(Context context, int chartStyle, int offsetHeight) {//主要構造方法 super(context); // TODO Auto-generated constructor stub mChartStyle = chartStyle; mOffsetHeight = offsetHeight; chartLabels(); chartDataSet(); chartRender(); }private void initChart(int chartStyle){switch(chartStyle){case 0: //豎向柱形圖 mChart = new BarChart(); //圖例 mChart.getAxisTitle().setLeftTitle("百分比"); break; case 1: //橫向柱形圖 mChart = new BarChart(); mChart.setChartDirection(XEnum.Direction.HORIZONTAL); break; case 2: //豎向3D柱形圖 mChart = new BarChart3D(); break; case 3: //橫向3D柱形圖 mChart = new BarChart3D(); mChart.setChartDirection(XEnum.Direction.HORIZONTAL); break; case 4: //豎向堆疊柱形圖 mChart = new StackBarChart(); ((StackBarChart) mChart).setTotalLabelVisible(false); break; case 5: //橫向堆疊柱形圖 mChart = new StackBarChart(); mChart.setChartDirection(XEnum.Direction.HORIZONTAL); ((StackBarChart) mChart).setTotalLabelVisible(false); break; }}@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh); //圖所占范圍大小 //mChart.setChartRange(w,h); }public void chartRender(){try {initChart(mChartStyle); //設置繪圖區默認縮進px值,留置空間顯示Axis,Axistitle.... int [] ltrb = getBarLnDefaultSpadding(); mChart.setPadding(DensityUtil.dip2px(getContext(), 50),ltrb[1], ltrb[2], ltrb[3]); //主圖縮進left, float top, float right,float bottom //數據源 mChart.setDataSource(chartData);//圖形數據 mChart.setCategories(chartLabels);//底部標簽 //數據軸 mChart.getDataAxis().setAxisMax(100); mChart.getDataAxis().setAxisMin(0); mChart.getDataAxis().setAxisSteps(20); //定義數據軸標簽顯示格式 mChart.getDataAxis().setLabelFormatter(new IFormatterTextCallBack(){@Override public String textFormatter(String value) {// TODO Auto-generated method stub Double tmp = Double.parseDouble(value); DecimalFormat df = new DecimalFormat("#0"); String label = df.format(tmp).toString(); return label+"%"; }}); //定義柱形上標簽顯示格式 mChart.getBar().setItemLabelVisible(true); mChart.getBar().getItemLabelPaint().setColor(Color.rgb(72, 61, 139)); mChart.getBar().getItemLabelPaint().setFakeBoldText(true); mChart.setItemLabelFormatter(new IFormatterDoubleCallBack() {@Override public String doubleFormatter(Double value) {// TODO Auto-generated method stub DecimalFormat df=new DecimalFormat("#0"); String label = df.format(value).toString(); return label+"%"; }}); mChart.DeactiveListenItemClick(); } catch (Exception e) {// TODO Auto-generated catch block Log.e(TAG, e.toString()); }}private void chartDataSet(){//標簽對應的柱形數據集 List<Double> dataSeriesA= new LinkedList<Double>();//一組一類 dataSeriesA.add(50d); dataSeriesA.add(25d); dataSeriesA.add(20d); BarData BarDataA = new BarData("Google",dataSeriesA,Color.rgb(73, 135, 218)); List<Double> dataSeriesB= new LinkedList<Double>(); dataSeriesB.add(35d); dataSeriesB.add(65d); dataSeriesB.add(75d); BarData BarDataB = new BarData("Baidu",dataSeriesB,Color.rgb(224, 4, 0)); List<Double> dataSeriesC= new LinkedList<Double>(); dataSeriesC.add(15d); dataSeriesC.add(10d); dataSeriesC.add(5d); BarData BarDataC = new BarData("Bing",dataSeriesC,Color.rgb(255, 185, 0)); chartData.add(BarDataA); chartData.add(BarDataB); chartData.add(BarDataC); }private void chartLabels(){chartLabels.add("路人甲"); chartLabels.add("路人乙"); chartLabels.add("路人丙"); }@Override public void render(Canvas canvas) {try{mChart.setChartRange(0.0f, mOffsetHeight, this.getWidth(),this.getHeight() - mOffsetHeight); //mChart.setChartRange(this.getMeasuredWidth(), this.getMeasuredHeight()); mChart.render(canvas); } catch (Exception e){Log.e(TAG, e.toString()); }} }類型
<string-array name="spinnerbarstyle"> <item>豎向柱形圖</item> <item>橫向柱形圖</item> <item>豎向3D柱形圖 </item> <item>橫向3D柱形圖</item> <item>豎向堆積柱形圖 </item> <item>橫向堆積柱形圖 </item> </string-array>layout
<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" android:background="@color/white" tools:context=".Myzhuxin" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/tv_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="huangyihuang" /> <Spinner android:id="@+id/spinner1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <!-- android:layout_width="match_parent" android:layout_height="wrap_content" --> <LinearLayout android:id="@+id/lay_chart" android:layout_width="500dip" android:layout_height="500dip" android:orientation="vertical"> </LinearLayout> </LinearLayout> </RelativeLayout>java代碼
public class Myzhuxin extends Activity {private Spinner mSpinner = null; private LinearLayout mLaychart = null; private int mSelected = 0; private int mMoveHeight = 0; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.myzhuxingtu); mLaychart = (LinearLayout) this.findViewById(R.id.lay_chart); mSpinner = (Spinner) findViewById(R.id.spinner1); mMoveHeight = mSpinner.getHeight(); String[] mItems = null; // 建立數據源 mItems = getResources().getStringArray(R.array.spinnerbarstyle); ArrayAdapter<String> _Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mItems); mSpinner.setAdapter(_Adapter); mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Override public void onNothingSelected(AdapterView<?> parent) {// TODO Auto-generated method stub }@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {// TODO Auto-generated method stub renderChart(position); }}); renderChart(0); }private void renderChart(int position) {int width = DensityUtil.dip2px(getApplicationContext(), 300); int height = DensityUtil.dip2px(getApplicationContext(), 400); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height); layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); mLaychart.removeAllViews(); SpinnerBarChart01View barChart01 = new SpinnerBarChart01View(this, position, mMoveHeight); mLaychart.addView(barChart01, layoutParams); }}總結
以上是生活随笔為你收集整理的Android 柱状图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装redis出现cc adlist.o
- 下一篇: Android2.2查看svn历史提交记