Ответ 1
Добавить setWillNotDraw(false)
в конструктор MyDrawableView. Оригинальный ответ здесь.
<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()
, что не так?
Добавить setWillNotDraw(false)
в конструктор MyDrawableView. Оригинальный ответ здесь.
Ваш вид имеет высоту 0. Вы установили, что у вашего представления есть height=wrap_content
, но вы не переопределяете onMeasure()
, чтобы сообщить инструментарию пользовательского интерфейса, насколько велик ваш вид.
Вам нужно @Override
метод OnMeasure(int, int)
указать размер вашего представления, вызвав setMeasuredDimension(int,int)
.
Если вы этого не сделаете, метод по умолчанию настроит ваше представление на размер width=0 height=0
. И поэтому даже не пытайтесь называть onDraw
вообще.
Метод OnMeasure
вызывает setMeasuredDimension(int,int)
, который показывает, насколько велика ваша точка зрения.
(Таким образом, вам нужно получить размер экрана андроида по методу OnMeasure
и вызвать 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()
не переопределяется.