Как я могу переопределить холст в моем представлении? - PullRequest
1 голос
/ 10 марта 2010

Я использую Android 2.1 и Eclipse.

Я определил LinearLayout с двумя компонентами, которые имеют размеры: 250 x 250.

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams llp = 
  new llp.LayoutParams(250, 250);

meter1View = new MeterView(this, "Meter 1");
ll.addView(meter1View, llp);
meter2View = new MeterView(this, "Meter 2");
ll.addView(meter2View, llp);   
ScrollView scrollView = new ScrollView(this);
scrollView.addView(ll);
setContentView(scrollView);

Пока все хорошо. Я вижу два вертикальных комментария на экране моего эмулятора.

Однако в моем классе Meter View размер холста в onDraw - это размер экрана моего эмулятора, который равен 480 на 800.

@Override
protected void onDraw(Canvas canvas) {
    int w = canvas.getWidth();
    int h = canvas.getHeight();
    Log.i(TAG, "  onDraw, w: " + w + ", h: " + h);
}

Я бы хотел, чтобы размер холста составлял 250 x 250, чтобы я мог передать этот холст процедурам рисования. Прямо сейчас мои процедуры рисования рисуют вне растрового изображения 250 x 250, которое было определено моим LinearLayout.

Я понимаю, что могу заставить свою процедуру рисования холста работать, переведя холст, но было бы чище, если бы я мог временно заменить первоначальный холст новым.

Я понимаю, что могу определить свой собственный холст следующим образом:

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

Как заменить холст, созданный классом View, на мой новый холст? Любая помощь будет принята с благодарностью.

Charles

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Не заменяйте Canvas, просто используйте вместо этого прямоугольник клипа.

1 голос
/ 10 марта 2010

вы должны использовать ширину и высоту вида, а не холста, оба доступны через getWidth () и getHeight (). Затем передайте эти размеры вашей программе рисования.

...