<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()
方法中的断点永远不会被击中,出了什么问题?
答案 0 :(得分:86)
在MyDrawableView构造函数中添加setWillNotDraw(false)
。原始答案是here。
答案 1 :(得分:36)
您的视图的高度为0.您可以将视图设置为height=wrap_content
,但不要覆盖onMeasure()
以告诉UI工具包您的视图有多大。
答案 2 :(得分:15)
您需要@Override
OnMeasure(int, int)
方法通过调用setMeasuredDimension(int,int)
来指定视图的大小。
如果不这样做,默认方法会将视图设置为大小为width=0 height=0
。因此,甚至根本不打算拨打onDraw
。
OnMeasure
方法调用setMeasuredDimension(int,int)
来表示您的观点有多大。
(所以你需要在OnMeasure
方法上获得android屏幕的大小并相应地调用setMeasuredDimension
。
答案 3 :(得分:3)
只需在自定义视图中layout_width
和layout_height
进行一些修复,而不是wrap_content
或fill_parent
。
这对我有用。
答案 4 :(得分:0)
虽然我是android新手,但我仍然相信问题是因为
setContentView(R.layout.xmllayout);
而不是"R.layout.xmllayout"
,传递MyDrawableView
个对象(使用findViewById
)并检查。
我没有尝试,但希望,它会起作用。
答案 5 :(得分:0)
您需要在构造函数方法中使用invalidate()来获取onDraw Called。
答案 6 :(得分:0)
设置自定义视图宽度后,应设置滚动宽度。
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();
答案 7 :(得分:0)
可能
setMinimumHeight(width);
setMinimumWidth(height);
在构造函数中未设置或onMeasure()
未被覆盖。
答案 8 :(得分:0)
这是您的视图可能不出现的另一个原因。如果要使用子视图创建自定义ViewGroup,请记住将子视图添加到ViewGroup中。
在ViewGroup构造函数调用中
addView(mySubView);
还请记住在onLayout()
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
mySubview.measure(...);
mySubview.layout(...);
}