画板基类继承view
package com.mytest.myapplication.Utility;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import android.widget.Button;
import java.lang.Thread;
import java.util.ArrayList;
//自定义简单曲线图
public class MyGraphicView extends View{
public Context _Context;
private Paint _mPaint;
private Paint _mPaint2;
public String _type="0";
// private Resources _res;
// private DisplayMetrics _dm;
/**
* 曲线上总点数
*/
private float[] mPoints={0,0,10,10,20,20,30,30,};
/**
* 纵坐标值
*/
private ArrayList<Double> yRawData;
/**
* 横坐标值
*/
private ArrayList<String> xRawDatas;
public MyGraphicView(Context context)
{
this(context, null);
}
public MyGraphicView(Context context, AttributeSet attrs)
{
super(context, attrs);
this._Context = context;
initView();
}
private void initView()//初始化
{
//this._res = _Context.getResources();
this._mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
this._mPaint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
// _dm = new DisplayMetrics();
// WindowManager wm = (WindowManager) _Context.getSystemService(Context.WINDOW_SERVICE);
// wm.getDefaultDisplay().getMetrics(_dm);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)//尺寸改变事件
{
super.onSizeChanged(w,h,oldw,oldh);
}
@Override
protected void onDraw(Canvas canvas)
{
_mPaint.setColor(Color.BLUE);//颜色赋值
_mPaint2.setColor(Color.RED);//颜色赋值
if(_type=="0") {
canvas.drawLine(0, 100, getWidth(), getHeight(), _mPaint);
// super.onDraw(canvas);
}
else
{
DrawXYAxis( canvas);//画坐标和曲线
// canvas.drawLines(mPoints, _mPaint);
}
}
public void Redraw(String type)//重绘触发
{
_type=type;
invalidate();//重绘触发事件
}
public void DrawXYAxis(Canvas canvas)//画坐标和曲线
{
int allWidth=getWidth();//界面宽度
int allHeight=getHeight();//界面高度
canvas.drawLine(50,50,(float)(50),(float)(allHeight-50),_mPaint2);//画y轴
canvas.drawLine((float)(50),(float)(allHeight-50),(float)(allWidth-50),(float)(allHeight-50),_mPaint2);//画x轴
float[] xPoints=new float[allWidth];
float[] yPoints=new float[allWidth];
for(int i=0;i<allWidth;i++)
{
xPoints[i]=i;
yPoints[i]=(float)(Math.random()*400);
}
canvas.drawText("测试曲线",(float)(allWidth/2.0),20, _mPaint);//画标题
for(int i=10;i<allWidth;i++)//画横轴刻度
{
if(i%50==0)
{
canvas.drawText(String.valueOf(i),i,allHeight-30, _mPaint);
}
}
for(int i=allHeight-10;i>50;i-=50)//画纵轴刻度
{
try {
canvas.drawText(String.valueOf(allHeight-10-i),20,i, _mPaint);
}
catch (Exception e)
{
Log.i("异常:",e.toString());
}
}
for(int i=0;i<allWidth-2;i++)//画曲线
{
canvas.drawLine(xPoints[i]+50,allHeight-210-yPoints[i],xPoints[i+1]+50,allHeight-210-yPoints[i+1], _mPaint);
}
}
public MyThread _Th=null;
public class MyThread extends Thread{
public Thread th;
public String thName;
public MyThread(String name)
{
thName=name;
}
public void run()
{
try {
Thread.sleep(1000);
run2();
}
catch (Exception e)
{
Log.i("线程异常",e.toString());
}
}
public void run2()
{
new Thread(new Runnable() {
@Override
public void run() {
Redraw("1");
}
}).start();
}
public void start()
{
if(th==null)
{
th= new Thread(this,thName);
th.start();
}
}
public void Fstop()
{
if(th!=null)
{
th.interrupt();
th.stop();
th=null;
}
}
}
}
绘图显示操作活动页(动态加载按钮和画板view:graphicView)
package com.mytest.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import com.mytest.myapplication.Utility.MyGraphicView;
public class MyDrawActivity extends AppCompatActivity {
MyGraphicView graphicView;
public Button button1;
public Button button2;
public Button button3;
public EditText editText1;
public Boolean draEnable=false;
public int displayTime=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
//final LinearLayout layout = new LinearLayout(this);
final TableLayout layout=new TableLayout(this);
graphicView=new MyGraphicView(this,null);
button1=new Button(this);
button2=new Button(this);
button3=new Button(this);
editText1=new EditText(this);
button1.setText("对角线");
button2.setText("开始");
button3.setText("结束");
editText1.setText("1000");
button1.setWidth(width);
button2.setWidth(width);
button3.setWidth(width);
editText1.setWidth(width);
layout.addView(button1);
layout.addView(button2);
layout.addView(button3);
layout.addView(editText1);
layout.addView(graphicView);
setContentView(layout);
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
graphicView. Redraw("0");//重绘触发
}
});
/* button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(graphicView._Th==null)
{
graphicView._Th= graphicView.new MyThread("绘图线程");
}
graphicView._Th.start();
// graphicView. Redraw("1");//重绘触发
}
});*/
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
displayTime=Integer.valueOf(editText1.getText().toString());
draEnable=true;
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
if(!draEnable)return;
try {
Thread.sleep(displayTime);
} catch (Exception e) {
}
runOnUiThread(new Runnable() {
@Override
public void run() {
graphicView.Redraw("1");//重绘触发
}
});
}
}
}).start();
}
});
button3.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
draEnable=false;
if(graphicView._Th==null)return;
graphicView._Th.Fstop();
}
});
}
}
活动页2(同步问题)
package com.mytest.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import com.mytest.myapplication.Utility.MyGraphicView;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MyDrawActivity extends AppCompatActivity {
MyGraphicView graphicView;
public Button button1;
public Button button2;
public Button button3;
public EditText editText1;
public Boolean draEnable=false;
public Boolean lockEnable=false;
public int displayTime=0;
Lock lock = new ReentrantLock();
Semaphore semaphore = new Semaphore(1);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
//final LinearLayout layout = new LinearLayout(this);
final TableLayout layout=new TableLayout(this);
graphicView=new MyGraphicView(this,null);
button1=new Button(this);
button2=new Button(this);
button3=new Button(this);
editText1=new EditText(this);
button1.setText("对角线");
button2.setText("开始");
button3.setText("结束");
editText1.setText("1000");
button1.setWidth(width);
button2.setWidth(width);
button3.setWidth(width);
editText1.setWidth(width);
layout.addView(button1);
layout.addView(button2);
layout.addView(button3);
layout.addView(editText1);
layout.addView(graphicView);
setContentView(layout);
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
graphicView. Redraw("0");//重绘触发
}
});
/* button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(graphicView._Th==null)
{
graphicView._Th= graphicView.new MyThread("绘图线程");
}
graphicView._Th.start();
// graphicView. Redraw("1");//重绘触发
}
});*/
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
displayTime=Integer.valueOf(editText1.getText().toString());
draEnable=true;
lockEnable=false;
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try{
while(lockEnable)
{
Thread.sleep(1);
}
lockEnable=true;
if (!draEnable) return;
try {
Thread.sleep(displayTime);
} catch (Exception e) {
String content=e.toString();
// lockEnable=false;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
graphicView.Redraw("1");//重绘触发
lockEnable=false;
}
});
}
catch (Exception e)
{
String content=e.toString();
lockEnable=false;
}
}
}
}).start();
}
});
button3.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
draEnable=false;
if(graphicView._Th==null)return;
graphicView._Th.Fstop();
semaphore.release();
}
});
}
}
活动页3(同步问题)
package com.mytest.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import com.mytest.myapplication.Utility.MyGraphicView;
import java.util.concurrent.Semaphore;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MyDrawActivity extends AppCompatActivity {
MyGraphicView graphicView;
public Button button1;
public Button button2;
public Button button3;
public EditText editText1;
public Boolean draEnable=false;
public Boolean lockEnable=false;
public int displayTime=0;
Lock lock = new ReentrantLock();
Semaphore semaphore = new Semaphore(1);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
//final LinearLayout layout = new LinearLayout(this);
final TableLayout layout=new TableLayout(this);
graphicView=new MyGraphicView(this,null);
button1=new Button(this);
button2=new Button(this);
button3=new Button(this);
editText1=new EditText(this);
button1.setText("对角线");
button2.setText("开始");
button3.setText("结束");
editText1.setText("1000");
button1.setWidth(width);
button2.setWidth(width);
button3.setWidth(width);
editText1.setWidth(width);
layout.addView(button1);
layout.addView(button2);
layout.addView(button3);
layout.addView(editText1);
layout.addView(graphicView);
setContentView(layout);
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
graphicView. Redraw("0");//重绘触发
}
});
/* button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(graphicView._Th==null)
{
graphicView._Th= graphicView.new MyThread("绘图线程");
}
graphicView._Th.start();
// graphicView. Redraw("1");//重绘触发
}
});*/
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
displayTime=Integer.valueOf(editText1.getText().toString());
draEnable=true;
lockEnable=false;
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try{
while(lockEnable)
{
Thread.sleep(1);
}
lockEnable=true;
if (!draEnable) return;
try {
Thread.sleep(displayTime);
} catch (Exception e) {
String content=e.toString();
// lockEnable=false;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
graphicView.Redraw("1");//重绘触发
lockEnable=false;
}
});
}
catch (Exception e)
{
String content=e.toString();
lockEnable=false;
}
}
}
}).start();
}
});
button3.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
draEnable=false;
if(graphicView._Th==null)return;
graphicView._Th.Fstop();
semaphore.release();
}
});
}
}