Android这两年开始大热,小弟也梦想着有一天能做出个属于自己的软件,呵呵,所以也投入到学习android的这股热潮里面去了。

最近学到surfaceView跟View,有个困扰了很久的问题,参考了别人的代码之后,到今天终于解决了,让我有种欣喜若狂的感觉啊:)。这个问题就是,怎样用在屏幕上画线。我们知道,android里面有一个屏幕触摸的事件onTouchEvent(MotionEvent),用来检测我们对屏幕的操作,这里主要介绍三个动作:ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_DOWN是点击屏幕动作,ACTION_UP是手指松开屏幕的动作,而ACTION_MOVE就是手指在屏幕上拖动的动作。当android侦测到这些事件的时候,它会记录下当前的坐标,再加上上一次位置的坐标,我们就可以利用drawLine()来画线了。

而困扰我的问题就是,如果用surfaceView来画的话,没法将我拖动屏幕的地方连成一条线,只能通过两个坐标画出一条直线! 我也不知道是不是有其他方法,如果各位看客知道的话,还望多多赐教。小弟不胜感激。

后来我上面找了好几天,终于通过研究一位大牛的代码之后,才发现,困扰我几天的问题,原来是这么的简单! 哎,真是少壮不努力,代码也欺负你啊 !-_- 。这个问题,用View就能完美的解决。至于为什么View行而surfaceView不行,这个有点搞不明白,哎,先不研究,直接上代码。

View 类

package com.android.DrawLineSample; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.MotionEvent; import android.view.View; class TestView extends View { public Canvas canvas; public Paint p; private Bitmap bitmap; float x,y; int bgColor; public TestView(Context context) { super(context); bgColor = Color.WHITE; //设置背景颜色 bitmap = Bitmap.createBitmap(480, 854, Bitmap.Config.ARGB_8888); //设置位图,线就画在位图上面,第一二个参数是位图宽和高 canvas=new Canvas(); canvas.setBitmap(bitmap); p = new Paint(Paint.DITHER_FLAG); p.setAntiAlias(true); //设置抗锯齿,一般设为true p.setColor(Color.RED); //设置线的颜色 p.setStrokeCap(Paint.Cap.ROUND); //设置线的类型 p.setStrokeWidth(8); //设置线的宽度 } //触摸事件 @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE) { //拖动屏幕 canvas.drawLine(x, y, event.getX(), event.getY(), p); //画线,x,y是上次的坐标,event.getX(), event.getY()是当前坐标 invalidate(); } if (event.getAction() == MotionEvent.ACTION_DOWN) { //按下屏幕 x = event.getX(); y = event.getY(); canvas.drawPoint(x, y, p); //画点 invalidate(); } x = event.getX(); //记录坐标 y = event.getY(); return true; } @Override public void onDraw(Canvas c) { c.drawBitmap(bitmap, 0, 0, null); } }

这是出来的效果:

代码下载(43k)

更多相关文章

  1. Android实现滑动的7种方法
  2. Android(安卓)View(一)-View坐标以及方法说明
  3. android window类的解释及软输入法模式选项:
  4. android 高级组件之Spinner
  5. Android属性设置android:noHistory="true",打开下一个Activity关
  6. Android(安卓)Map开发基础知识学习笔记
  7. android:View的setTag和getTag使用
  8. react-native 启动页(react-native link react-native-splash-scr
  9. Android-设置手机桌面

随机推荐

  1. Android系统架构基本模式解析
  2. Unity接入Android广告: 二、将Aar包放入Un
  3. android 模拟器横竖屏切换
  4. 一个Android应用程序App中存在多少个Cont
  5. android 反编译的一点思路
  6. Google Android Market电子市场/应用商店
  7. android handler 简介
  8. Android清除本地数据缓存代码
  9. Android之背景图片设置为重复而不是默认
  10. Android评分条控件RatingBar自定义背景颜