解决方案 »
- 能否仅在jni中获取系统时间(不调用java部分代码)
- 找不到import com.android.internal.telephony.gsm.NetworkInfo;
- 如何使程序默认的发送短信,而不需要调用发短信的程序
- 求助关于对话框参数传递的问题
- 让EditText位于GridView内部
- android 屏幕分辨率 密度问题?
- android button点击后锁定几秒后在开
- android 串口通信
- android中用jsoup技术解析html后用listview分条显示
- 按下home键后回到app后新生成了activity解决
- 怎么查看 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就是我们保存绘制内容的全局对象