我试着做自定义组件.我扩展了View课程并用onDraw覆盖方法做了一些绘图.为什么我需要覆盖onMeasure?如果我没有,一切都被证明是正确的.有人可以解释一下吗?我该怎么写我的onMeasure方法?我见过几个教程,但每个教程都有点不同.有时他们会super.onMeasure在最后打电话,有时他们会使用setMeasuredDimension而不是打电话.差异在哪里?
毕竟我想要使用几个完全相同的组件.我将这些组件添加到我的XML文件中,但我不知道它们应该有多大.我希望稍后设置它的位置和大小(为什么我需要在自定义组件类时设置大小,onMeasure如果在onDraw我绘制它时也是如此).什么时候我需要这样做?
我知道DP,SP和PX之间的区别.在搜索了这个主题后,我发现没有什么能让我完全满意.也许这篇文章是重复的,但我仍然想知道从DP到PX,DP到SP,从SP到PX,从PX到SP,从SP到DP,从DP到SP的转换公式是什么?我知道一些代码可以做到这一点,但它们并不完美.
什么时候
View.onMeasure(int widthMeasureSpec, int heightMeasureSpec)
Run Code Online (Sandbox Code Playgroud)
叫什么名字?我有一个Activity,需要在调用onMeasure后执行一个动作.
我的问题与此处发布的未回答的问题相同.在查看文档指出onMeasure当被称为requestLayout()时,它认为是可以没有它的当前范围内不再适合被称为,这显然是对自身的视图调用.
但是,这并没有告诉我何时我的活动可以假设我的视图已被测量.我已经使用此代码将ImageView扩展为TouchImageView.这里建议我应该使用onMeasure方法来缩放我的图像.我希望在测量ImageView后更新TextView的值,以显示图像缩放的百分比.
我正在学习自定义视图,并希望了解invalidate()和requestLayout().
请参考这个答案及其图表:
invalidate() 告诉Android视图的状态已经改变,需要重新绘制.
requestLayout() 表示视图的大小可能已更改,需要重新测量,然后重新绘制.
invalidate()将调用dispatchDraw(),draw()并onDraw()因此重新呈现视图.
requestLayout() 另一方面,从测量再到再次渲染,几乎可以做任何事情.
为什么那么多的例子(甚至是TextView源代码)都会调用invalidate(),然后requestLayout()就在下一行呢?