android画笔颜色异常,安卓的画笔如何在不同的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 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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值