Android 未调用自定义onDraw()方法

Android 未调用自定义onDraw()方法,android,drawing,Android,Drawing,我放置了一个断点,但在onDraw()方法中从未命中断点,有什么问题吗?您的视图的高度为0。您将视图设置为具有height=wrap\u content,但是您没有覆盖onMeasure(),告诉UI工具包您的视图有多大。虽然我是android新手,但我相信问题是因为 public class MyActivity extends Activity { // Your member variable declaration here // Called when the acti

我放置了一个断点,但在
onDraw()方法中从未命中断点,有什么问题吗?

您的视图的高度为0。您将视图设置为具有
height=wrap\u content
,但是您没有覆盖
onMeasure()
,告诉UI工具包您的视图有多大。

虽然我是android新手,但我相信问题是因为

public class MyActivity extends Activity {
    // Your member variable declaration here
    // Called when the activity is first created.
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // Your code here super.onCreate(savedInstanceState);
        setContentView(R.layout.xmllayout);
        LinearLayout svll = (LinearLayout) findViewById(R.id.svLL);
        svll.setLayoutParams(new LinearLayout.LayoutParams(300, 300));
    }

} 
而不是
“R.layout.xmllayout”
,传递
MyDrawableView
对象(使用
findViewById
)并检查。
我没有尝试过,但希望它能起作用。

只需在自定义视图的
layout\u width
layout\u height
的初始时间进行一些修复,而不是
wrap\u content
fill\u parent

这对我很有用。

在MyDrawableView构造函数中添加
setWillNotDraw(false)
。最初的答案是。

您需要
@重写
OnMeasure(int,int)
方法,通过调用
setMeasuredDimension(int,int)
来指定视图的大小

如果没有,默认方法会将视图设置为大小
width=0高度=0
。因此,根本不要尝试调用onDraw

OnMeasure的
OnMeasure
方法调用
setMeasuredDimension(int,int)
,它告诉您的视图有多大


(因此,您需要在
OnMeasure
方法上获取android屏幕的大小,并相应地调用
setMeasuredDimension

您需要在构造函数方法中使用invalidate()来调用onDraw。

设置自定义视图宽度后,您应该设置滚动宽度

setContentView(R.layout.xmllayout); 
大概

FMChart = (HKFMDrawChart)findViewById(R.id.fm_chart);
FMChart.setWidth(xxxx);
float scrollViewWidth = FMChart.getScrellViewWidth(); 
FMChart.setLayoutParams(new LinearLayout.LayoutParams(
      (int) (scrollViewWidth + HKApplication.getScreenWidth() / 2),
       LinearLayout.LayoutParams.WRAP_CONTENT));
FMChart.postInvalidate(); // onDraw(); 

未在构造函数中设置,或者未覆盖
onMeasure()

以下是视图可能未出现的另一个原因。如果要使用子视图创建自定义视图组,请记住将子视图添加到视图组中

在视图组构造函数调用中

setMinimumHeight(width);
setMinimumWidth(height);
还要记住在
onLayout()中测量和布局子视图


您的活动代码是什么?也许问题就在这里?公共类MyActivity扩展了Activity{//首次创建Activity时在此处调用了您的成员变量声明。@Override public void onCreate(Bundle savedInstanceState){//您在此处的代码super.onCreate(savedInstanceState);setContentView(R.layout.xmllayout);LinearLayout svll=(LinearLayout)findViewById(R.id.svLL);svLL.setLayoutParams(newlinearlayout.LayoutParams(300300));}我将您的代码移到了问题中,所以更容易理解谢谢klez,还没有人发现这个错误,一定是一些简单的错误:(有趣的是,我覆盖了onLayout和onMeasure。这些函数中遇到了断点。但是对于onLayout,底部为0,右侧为300,左侧为300,顶部为0。这就是没有调用onDraw的原因吗?是否有任何使用xml的自定义视图示例代码?这适用于viewgroup not viewWorked for我。但是有一个问题。我正在设置
View
我已经剪辑过。当覆盖
onDraw
时,视图会闪烁(看起来像是再次绘制的)。当取消剪辑时,它会平滑地动画。你能帮我解决这个问题吗?确实,当维度为0时,onDraw()不会被调用。我使用的是getSuggestedMinimumWidth()它返回0。然后我将其与setMeasuredDimension()一起使用以生成一个正方形……不用说,onDraw()没有被调用。
FMChart = (HKFMDrawChart)findViewById(R.id.fm_chart);
FMChart.setWidth(xxxx);
float scrollViewWidth = FMChart.getScrellViewWidth(); 
FMChart.setLayoutParams(new LinearLayout.LayoutParams(
      (int) (scrollViewWidth + HKApplication.getScreenWidth() / 2),
       LinearLayout.LayoutParams.WRAP_CONTENT));
FMChart.postInvalidate(); // onDraw(); 
setMinimumHeight(width);
setMinimumWidth(height);
addView(mySubView);
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    mySubview.measure(...);
    mySubview.layout(...);
}