解决方案 »
- android中gridview使用中出现重影
- android 怎么获取手机桌面上的动态壁纸的
- android中listview中可以嵌套使用gallery吗?
- 请教一个动态加载自定义View的问题!!!!!!
- 调用相机,能扫描识别PDF417的二维码吗?
- android中sqlite数据库放在sdcard中在做增删改操作的时候数据库中所有表自动删除,求指导
- Dreamweaver 安装 phonegap 服务老失败
- json解析字符串
- AbsoluteLayout在页面上滑动时,怎么根据速度控制距离
- 闹钟程序休眠后不再提示。大家进来讨论一下吧。
- 怎么查看 android 应用程序内存使用情况
- 请教关于android音乐播放器歌词显示
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
//....
public void draw(Canvas canvas) {
//....
onDraw(canvas);
//....
} /**
* Implement this to do your drawing.
*
* @param canvas the canvas on which the background will be drawn
*/
protected void onDraw(Canvas canvas) {
}
}我们在自己的继承类中多态实现了onDraw()
这样流程就清楚了,我们知道view只有在onMeasure和onLayout调用,或者手动调用invalidate方法时才会开始重绘。来说一说楼主的逻辑吧
如果将drawLine方法直接放在onDraw里面,此时在第一次加载view或者手动调用invalidate()时都会发生绘制,如楼主所说可以看到线条,
但是如果按照楼主第二种方法手动调用drawLine(),此时没有发生重绘操作,即父view的draw()根本就没有发生回调,怎么可能有图形出现呢。
绘图不是只要在canvas中画一下就能完事儿的,每次绘图都涉及到背景重绘,图层等很多元素,所以单独drawLine一下是没有用的
提供给你两种方法,一种是用数组保存每次绘制的线条,这种方法一般对单调的绘图比较有效,比如只绘制线段,只要在数组中保存各个线段的起始点就OK,每次在onDraw中全部在绘制一次,或者就使用一个bitmap对象保存内容,
//先绘制到bitmap上
Canvas tmp = new Canvas(mBitmap);
tmp.drawLine(mFirstX, mFirstY, mSecondX, mSecondY, mPaint);
//再把bitmap画到canvas上
canvas.drawBitmap(mBitmap, 0, 0, mPaint);
mBitmap就是我们保存绘制内容的全局对象