android折线趋势图

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"  
    android:background="@android:color/black"
    >
    <LinearLayout
      android:id="@+id/lays"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
       android:orientation="horizontal"
       android:background="@null">
    </LinearLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@null">
        <HorizontalScrollView
           android:id="@+id/scrollview"
           android:layout_height="wrap_content"
           android:layout_width="fill_parent"
           android:scrollbars="none">
        <LinearLayout
            android:id="@+id/lay"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
             android:orientation="horizontal">
        </LinearLayout>
    </HorizontalScrollView>
    </FrameLayout>
</FrameLayout>

MainActivity.java

package com.example.graphs_image;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import android.os.Bundle;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
@SuppressLint("NewApi")
public class MainActivity extends Activity {
    @ViewInject(R.id.scrollview)
    private HorizontalScrollView hsv;
    @ViewInject(R.id.lay)
    private LinearLayout lay;
    @ViewInject(R.id.lays)
    private LinearLayout lays;
    private Context context;
  
    //随机取拆线数据

    static float a1=(float) (Math.random()*5);            
    static float numb1= a1;
    static DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
    static String p1=decimalFormat.format(numb1);//format 返回的是字符串            
    static float b1 = Float.parseFloat(p1);

    
    static float a2=(float) (Math.random()*5);            
    static float numb2= a2;
    static String p2=decimalFormat.format(numb2);        
    static float b2 = Float.parseFloat(p2);
    
    static float a3=(float) (Math.random()*5);            
    static float numb3= a3;
    static String p3=decimalFormat.format(numb3);        
    static float b3=Float.parseFloat(p3);
    
    static float a4=(float) (Math.random()*5);            
    static float numb4= a4;
    static String p4=decimalFormat.format(numb4);            
    static float b4=Float.parseFloat(p4);
    
    static float a5=(float) (Math.random()*5);            
    static float numb5= a5;
    static String p5=decimalFormat.format(numb5);            
    static float b5=Float.parseFloat(p5);
    
    static float a6=(float) (Math.random()*5);            
    static float numb6= a6;
    static String p6=decimalFormat.format(numb6);            
    static float b6=Float.parseFloat(p6);
    
    static float a7=(float) (Math.random()*5);            
    static float numb7= a7;
    static String p7=decimalFormat.format(numb7);    
    static float b7=Float.parseFloat(p7);
    
    //折线数据数组        
    private static float[] temp = {b1,b2,b3,b4,b5,b6,b7};    
    //private static float[] temp = {1,2,3,4,5,6,7};

   
    private static String[] time = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewUtils.inject(this);
        context = this;
        initDate();
    }
    private void initDate() {
        //拿能滑动的那个布局的值
        ShiView ssvv = new ShiView(context,temp,time);
        //布局宽、高的参数
        LayoutParams lpp = new LayoutParams(1500, 600);        
        //把值设置在布局中
        ssvv.setLayoutParams(lpp);
        //添加视图值
        lay.addView(ssvv);
        //拿不能滑动的线条布局的值
        ShiViews ssvvs = new ShiViews(context);        
        LayoutParams lpps = new LayoutParams(1500, 600);
        ssvvs.setLayoutParams(lpps);
        lays.addView(ssvvs);
    }
    
}


ShiView.java

package com.example.graphs_image;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

//折线
public class ShiView extends View {
    float[] temp = new float[7];
    String[] dayTime = new String[7];
    private Context context;
    private Canvas canvass;//画布
    private Paint paint;//油漆 绘画
    private Paint paints;
    //有参构造方法
    public ShiView(Context context, float[] temp, String[] dayTime) {
        super(context);
        this.temp = temp;
        this.dayTime = dayTime;
        this.context = context;
    }
    public ShiView(Context context) {
        super(context);
    }
    public ShiView(Context context, AttributeSet attrs) {//AttributeSet 属性设置
        super(context, attrs);
        
    }
    
    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        canvass = canvas;
        paint = new Paint();
        paints = new Paint();
        /* 去锯齿 */
        paint.setAntiAlias(true);
        paints.setAntiAlias(true);
        
        //纵坐标
        paint.reset();
        //日期字体的颜色
        paint.setColor(Color.CYAN);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(2);
        paint.setTextSize(20);
        
        //横坐标
        for(int i=0;i<7;i++){
            canvas.drawText(dayTime[i], i*200+100, 190, paint);
        }
        
        //折线
        paint.reset();
        paint.setColor(Color.BLUE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        //文字
        paints.reset();
        paints.setColor(Color.RED);
        paints.setTextSize(25);
        paints.setStyle(Paint.Style.STROKE);
        paints.setStrokeWidth(2);
        
        Path path = new Path();
        Path paths = new Path();
        //路径拆线移动位置     path.moveTo(x, y);        
        path.moveTo(115,  150-temp[0]*20);

        for(int i=1;i<7;i++){
            path.lineTo(i*200+115,  150-temp[i]*20);
            
        }
        //连折线
        canvas.drawPath(path, paint);
        
        paint.reset();
        //设置点的颜色
        paint.setColor(Color.MAGENTA);
        // 设置样式-填充
        paint.setStyle(Style.FILL);
        // 绘图    从资源文件中生成位图
        for(int i=0;i<7;i++){
            int tempy = (int)temp[i];    
             //画浮动的数据            
            canvas.drawText(temp[i]+"", i*200+105, 150-temp[i]*(float)20, paints);
            //第一、二个参数 是x、y位置      第三个为 圆点的半径     第四个为 画笔  //画圆点
            canvas.drawCircle(i*200+115, 150-temp[i]*(float)20, 3, paint);
            
        }
    }
    //触摸事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
          float x = event.getX();   
          float y = event.getY();   
          for(int i=0;i<7;i++){
              float tempx = i*200+115;
              float tempy = 150-temp[i]*(float)16;  
              if(x >= (tempx-15)  && x <= (tempx+15) && y <= tempy+15 && y >= tempy-15){
                  Toast.makeText(context,temp[i]+"", Toast.LENGTH_SHORT).show();
                  break;
              }
          }
          return super.onTouchEvent(event);
    }
}




ShiViews.java

package com.example.graphs_image;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebSettings.TextSize;

//水平线
public class ShiViews extends View {
    public ShiViews(Context context) {
        super(context);
    }

    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint = new Paint(); // 相当于绘画笔
        /* 去锯齿 */
        paint.setAntiAlias(true); // 设置平滑
        /* 设置paint的颜色 */
        paint.setColor(Color.YELLOW);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(1); // 设置画笔线的大小 1像素

        // 划线 画了14条水平线 长度是1400.0f*72 线与线这间的间距高度是40 y轴每隔40画一条水平线
        // canvas.drawLine(startX, startY, stopX, stopY, paint);

        canvas.drawLine(0.0f, 10.0f, 1400.0f * 72, 10.f, paint);    // 7
        canvas.drawLine(0.0f, 20.0f, 1400.0f * 72, 20.f, paint);    // 6.5
        canvas.drawLine(0.0f, 30.0f, 1400.0f * 72, 30.f, paint);    // 6
        canvas.drawLine(0.0f, 40.0f, 1400.0f * 72, 40.f, paint);    // 5.5
        canvas.drawLine(0.0f, 50.0f, 1400.0f * 72, 50.f, paint);    // 5
        canvas.drawLine(0.0f, 60.0f, 1400.0f * 72, 60.f, paint);    // 4.5
        canvas.drawLine(0.0f, 70.0f, 1400.0f * 72, 70.f, paint);    // 4
        canvas.drawLine(0.0f, 80.0f, 1400.0f * 72, 80.f, paint);    // 3.5
        canvas.drawLine(0.0f, 90.0f, 1400.0f * 72, 90.f, paint);    // 3
        canvas.drawLine(0.0f, 100.0f, 1400.0f * 72, 100.0f, paint); // 2.5
        canvas.drawLine(0.0f, 110.0f, 1400.0f * 72, 110.f, paint);  // 2
        canvas.drawLine(0.0f, 120.0f, 1400.0f * 72, 120.0f, paint); // 1.5
        canvas.drawLine(0.0f, 130.0f, 1400.0f * 72, 130.0f, paint); // 1
        canvas.drawLine(0.0f, 140.0f, 1400.0f * 72, 140.0f, paint); // 0.5
        canvas.drawLine(0.0f, 150.0f, 1400.0f * 72, 150.0f, paint); // 0

        // 纵坐标
        paint.reset();
        paint.setColor(Color.GREEN); // 使y坐标数字的颜色变绿色
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(2);
        paint.setTextSize(20);

        // canvas.drawText(text, x, y, paint)
        // 把30这个文字写在x轴为10 y轴为80的位置

        canvas.drawText("7", 10, 10, paint);
        canvas.drawText("5", 10, 50, paint);
        canvas.drawText("3", 10, 90, paint);
        canvas.drawText("0", 10, 150, paint);
    }
}


结果图如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值