自定义的onDraw()方法不被调用
<LinearLayout android:id="@+id/svLL" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:id="@+id/sv" android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"> <!-- <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/scrollbar_2_text" /> --> <com.mypackage.MyDrawableView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView> </LinearLayout>
public class MyDrawableView extends View { Context thisContext; public MyDrawableView(Context context, AttributeSet attr) { super(context); thisContext = context; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); final Paint paint = new Paint(); paint.setColor(Color.BLUE); paint.setTextSize(12); canvas.drawText("Blah blah", 0, 100, paint); } }
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)); } }
我正在放置一个断点,但断点在onDraw()
方法里面不会被打到,怎么了?
在MyDrawableView构造函数中添加setWillNotDraw(false)
。 原来的答案在这里 。
您的视图的高度为0.您将视图设置为height=wrap_content
,但是您不要覆盖onMeasure()
来告诉UI工具箱View有多大。
您需要通过调用setMeasuredDimension(int,int)
OnMeasure(int, int)
方法来指定视图的大小。
如果你不这样做,默认的方法将设置你的视图的大小width=0 height=0
。 因此,甚至不要试图打电话给onDraw
。
OnMeasure
方法调用setMeasuredDimension(int,int)
,它告诉您视图有多大。
(所以你需要在OnMeasure
方法上获得android屏幕的大小,并相应地调用setMeasuredDimension
)。
只需要使layout_width
和layout_height
的自定义视图在初始阶段得到修复,而不是wrap_content
或fill_parent
。 这对我有效。
虽然我是Android新手,但我相信问题是因为
setContentView(R.layout.xmllayout);
而不是"R.layout.xmllayout"
,传递MyDrawableView
对象(使用findViewById
)并检查。 我没有尝试,但希望,它会工作。
您需要在构造函数方法中使用invalidate()来获取调用的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);
在构造函数中未设置或onMeasure()
未被覆盖。