2014-10-19 100 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); 
} 

我显示的x文本协调,以便知道哪些图绘。

这是我主要活动的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就能看到它们。 还将布局参数设置为您的自定义视图。