飞smile翔 飞smile翔
关注数: 0 粉丝数: 0 发帖数: 5 关注贴吧数: 6
安卓的画笔如何在不同的onTouchEvent位置变成不用的颜色 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<Float> list = new ArrayList<Float>(); 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(); } } }
1 下一页