该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package com.example.dell.myapplication;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.v4.view.MotionEventCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.Log;
import android.util.MonthDisplayHelper;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
EmbossMaskFilter emboss;
BlurMaskFilter blur;
DrawView drawView;
float i;
float j;
float k;
float bj;
float x;
float y;
float b;
TextView tView;
//TextView tView = new TextView(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
tView = new TextView(this);
super.onCreate(savedInstanceState);
FrameLayout line = new FrameLayout(this);
line.addView(tView);
DisplayMetrics displayMetrics = new DisplayMetrics();
//获取创建的宽度和高度
getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
//创建一个Draw,该DrawView的宽度,高度与该Activity保持相同
drawView = new DrawView(this,displayMetrics.widthPixels,displayMetrics.heightPixels);
line.addView(drawView);
setContentView(line);
emboss = new EmbossMaskFilter(new float[]{1.5f, 1.5f, 1.5f}, 0.6f, 6, 4.2f);
blur = new BlurMaskFilter(8,BlurMaskFilter.Blur.NORMAL);
}
class DrawView extends View {
//定义记录前一个拖动事件发生点的坐标
float preX;
float preY;
double jl;
float bj;
private Path path;
public Paint paint = null;
//定义内存中的一个图片,该图片将作为缓冲区
Bitmap cacheBitmap = null;
//定义cacheBitmap上的Canvas对象
Canvas cacheCanvas = null;
List list = new ArrayList();
int SAMPLE_MAX = 10;
long preTime = 0;
long totalTime = 0;
public DrawView(Context context, int width, int height){
super(context);
jl = (float)Math.sqrt((x-i)*(x-i)+(y-j)*(y-j));
Log.i("哈哈哈哈哈哈哈",b + "像素 / ");
//if(b > 360.0) {
//创建一个与该View具有相同大小的缓冲区
cacheBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas();
path = new Path();
//设置cacheCanvas将会绘制到内存中的cacheBitmap上
cacheCanvas.setBitmap(cacheBitmap);
//设置画笔的颜色
paint = new Paint(Paint.DITHER_FLAG);
paint.setColor(Color.RED);
//设置画笔风格
paint.setStyle(Paint.Style.STROKE);
paint.setDither(true);
//反锯齿
paint.setAntiAlias(true);
paint.setDither(true);
//}else{
//创建一个与该View具有相同大小的缓冲区
/* cacheBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas();
path = new Path();
//设置cacheCanvas将会绘制到内存中的cacheBitmap上
cacheCanvas.setBitmap(cacheBitmap);
//设置画笔的颜色
paint = new Paint(Paint.DITHER_FLAG);
paint.setColor(Color.RED);
//设置画笔风格
paint.setStyle(Paint.Style.STROKE);
paint.setDither(true);
//反锯齿
paint.setAntiAlias(true);
paint.setDither(true);*/
//}
}
private void AddShift(float shift){
int size = list.size();
if(size < SAMPLE_MAX){
list.add(shift);
}else{
list.remove(0);
list.add(shift);
}
}
private float getSpeed(){
float init = 0.0f;
for(float shift : list){
init += shift;
Log.i("位移/总时长/样本个数",init + "像素 / ");
}
float speed = init / (totalTime/1000);
Log.i("位移/总时长/样本个数",init + "像素 / " + totalTime + " s/样本个数:" + list.size());
return speed;
}
@Override
public boolean onTouchEvent(MotionEvent event){
//获取拖动事件的发生位置
float x = event.getX();
float y = event.getY();
float a;
float b;
float c;
float shift = 0;
Log.i("触摸点的X坐标",x + "像素 / ");
Log.i("触摸点的Y坐标",y + "像素 / ");
a = (i - x) * (i - x) + (j - y) * (j - y);
Log.i("触摸点到圆心距离的平方",a + "像素 / ");
b = (float)Math.sqrt(a);
Log.i("触摸点到圆心距离",b + "像素 / ");
c = Math.abs((b-k));
Log.i("偏移量的绝对值",c + "像素 / ");
tView.setTextSize(20);
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
//从前一个点绘制到当前点之后,把当前点定义下次绘制的前一个点
//shift = (float)Math.sqrt(((x - preX)*(x - preX) + (y - preY)*(y - preY)));
Log.i("ACTION_DOWN","进入case dowm");
path.moveTo(x, y);
preX = x;
preY = y;
preTime = System.currentTimeMillis();
Log.i("ACTION_DOWN","手指按压下的时间点" + preTime);
Log.i("ACTION_DOWN","离开case dowm");
//Log.i("TTTTTTT",preTime + "像素 / ");
break;
case MotionEvent.ACTION_MOVE:
//从当前一个点绘制到当前点之后,把当前点定义成下次绘制的前一个点
path.quadTo(preX, preY, x , y);
shift = (float)Math.sqrt(((x - preX)*(x - preX) + (y - preY)*(y - preY)));
preX = x;
preY = y;
Log.i("相隔之间的两个点的距离",shift + "像素 / ");
AddShift(shift);
break;
case MotionEvent.ACTION_UP:
Log.i("ACTION_UP","进入case up");
cacheCanvas.drawPath(path, paint);//1
path.reset();
totalTime = (System.currentTimeMillis() - preTime);
float speed = getSpeed();
tView.setText("[速度]"+ speed+"像素/秒 "+ "[偏移]" + b + "像素 "+"[用时]" + totalTime/1000 + "s");
tView.setTextSize(15);
//tView.setText(speed);
//Log.i("speed",speed+"");
Log.i("ACTION_UP","离开case up");
break;
default:
break;
}
//AddShift(shift);
//可以在这给textview设置值
//float speed = getSpeed();
//tView.setText(speed);
//Log.i("speed",speed+"");
invalidate();
//返回true表明处理方法已经处理该事件
return true;
}
@Override
public void onDraw(Canvas canvas) {
Paint mpaint = new Paint();
mpaint.setColor(Color.BLUE);
mpaint.setStyle(Paint.Style.STROKE);
mpaint.setDither(true);
Paint bmpPaint = new Paint();
//将cacheBitmap绘制到该View组件上
canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);//2
//沿着path绘制
canvas.drawPath(path, paint);
int viewWidth = this.getWidth();
int viewHeight = this.getHeight();
cacheCanvas.drawCircle(viewWidth / 2, viewHeight / 2 , viewWidth / 3, mpaint);
cacheCanvas.drawCircle(viewWidth / 2 , viewHeight / 2 , viewWidth / 4, mpaint);
cacheCanvas.drawCircle(viewWidth / 2 , viewHeight / 2 , viewWidth / 5, mpaint);
i = viewWidth / 2;
j = viewHeight / 2;
k = viewWidth / 4;
bj = viewWidth / 3;
Log.i("呵呵呵呵呵呵呵呵呵呵呵",bj + "像素 / ");
invalidate();
}
}
}