2014-10-19 20 views
0

Я пытаюсь нарисовать несколько пользовательских представлений в макете, но только первое представление, которое я добавляю, нарисовано.Рисование нескольких пользовательских представлений

Мой собственный класс мнение:

public ButtonView(Context context, int k) { 
    super(context); 
    this.setX(20+k*80); 
    init(); 
} 

private void init(){ 
    paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setColor(0x99ffffff); 
} 

@Override 
protected void onDraw(Canvas cv){ 
    cv.drawText(""+getX(), 0, 80, paint); 
} 

Я отображения текста координаты х для того, чтобы знать, какой вид рисуется.

Это код onCreate моего основного вида деятельности.

blay = (LinearLayout) this.findViewById(R.id.buttonslayout); 
for(int k=0; k<10; k++){ 
    ButtonView e = new ButtonView(this,k); 
    blay.addView(e); 
} 

При запуске приложения отображается только первый вид. Я получаю «20.0», отображаемый в белом в правильном положении, но остальные представления не отображаются. Отлаживая приложение, я понимаю, что экземпляры представлений создаются, но по какой-то причине они не отображаются. Также я попытался использовать invalidate и переопределить метод onMeasure, но все еще не работает.

ответ

1

Я изменил ваш пользовательский вид, пожалуйста, проверьте, работает ли это. Я думаю, основная проблема с вашим кодом заключалась в том, что один вид занимал весь экран. Поэтому я переопределение функции onMeasure

package com.example.stack2; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View; 

public class ButtonView extends View{ 
    public ButtonView(Context context, int k) { 
     super(context); 
     //this.setX(20+k*80); 
     init(); 
    } 

    public ButtonView(Context context, AttributeSet attrs, int defStyleAttr, 
      int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
     // TODO Auto-generated constructor stub 
    } 

    public ButtonView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     // TODO Auto-generated constructor stub 
    } 

    public ButtonView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 
    } 

    public ButtonView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    Paint paint; 
    private void init(){ 
     paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setTextSize(20); 
    } 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // TODO Auto-generated method stub 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     //e.measure(0, 0); 
     getLayoutParams().width=100; 
    } 
    @Override 
    protected void onDraw(Canvas cv){ 
     super.onDraw(cv); 

     cv.drawText(""+getX(), 0, cv.getHeight()/2, paint); 
    } 
} 

Также убедитесь, что ориентация вашей линейной компоновки горизонтально

0

Попробуй установить некоторые различные цвета для каждого view..you будет иметь возможность видеть их. Также задайте параметры макета для ваших пользовательских представлений.

Смежные вопросы