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);
}
}
结果图如下: