设为首页 加入收藏

TOP

andoid 自定义view 画折线图(一)
2017-10-13 10:13:13 】 浏览:9259
Tags:andoid 定义 view 线图

1 这个主要包含了简单的绘图操作 还是比较简单的

 

2 说一下原理把 首先根据价格的最大值和最小只的差异获取比例,然后在找一个最低点作为价格最低点

3 把说有点连起来用path画一个多边形

4 然后在划线,最后画小原点

5 要注意DrawText 的起点的xy坐标,和android 坐标系

 

package com.che300.price.component;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

import com.che300.price.R;
import com.che300.price.util.UIUtil;

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

/**
 * Created by Administrator on 2016/6/23.
 */
/*
LineChartView m = (LineChartView) findViewById(R.id.LineChartView); // 这边是调用demo
        List<LineChartView.ItemInfo> infos = new ArrayList<>();
        LineChartView.ItemInfo info = new LineChartView.ItemInfo(14.36f,"201612");
        LineChartView.ItemInfo info1 = new LineChartView.ItemInfo(11.36f,"201613");
        LineChartView.ItemInfo info2 = new LineChartView.ItemInfo(13.36f,"201615");
        LineChartView.ItemInfo info3 = new LineChartView.ItemInfo(12.36f,"201612");
        LineChartView.ItemInfo info4= new LineChartView.ItemInfo(11.36f,"201612");
        LineChartView.ItemInfo info5= new LineChartView.ItemInfo(11.36f,"201612");
        infos.add(info);
        infos.add(info1);
        infos.add(info2);
        infos.add(info3);
        infos.add(info4);
        infos.add(info5);
        m.setPrices(infos);
   <com.che300.price.component.LineChartView  这里是布局
        android:id="@+id/LineChartView"
        android:layout_width="match_parent"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_height="wrap_content" />
        */
public class LineChartView extends View {

    private Paint mpaint;
    private int width, heigth;
    private final  int DEFAULTWIDTH= 200; // 标注下的高度150dp
    private Context context_;
    public List<ItemInfo> prices = new ArrayList<>();
    public List<PointF> pointFs = new ArrayList<>();
    public  int  pricetipsize ;

    public void setPrices(List<ItemInfo> prices) {
        this.prices.clear();
        this.prices.addAll(prices);
        invalidate();
    }

    public LineChartView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public LineChartView(Context context) {
        super(context);
    }

    public LineChartView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void init(Context context) {
        this.context_ = context;
        mpaint = new Paint();
        mpaint.setAntiAlias(true);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthmode = MeasureSpec.getMode(widthMeasureSpec);
        int hightmode = MeasureSpec.getMode(heightMeasureSpec);
        int widthsize = MeasureSpec.getSize(widthMeasureSpec);
        int higthsize = MeasureSpec.getSize(heightMeasureSpec);
        if (widthmode == MeasureSpec.EXACTLY) {
            width = widthsize;
        } else {
            width = UIUtil.getDisplayMetrics(context_).widthPixels;
        }
        if (hightmode == MeasureSpec.EXACTLY) {
            heigth = higthsize;
        } else {
            heigth = UIUtil.dp2pxIn
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇android 官方DrawerLayout的介绍.. 下一篇Andoid内存泄露

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目