如何在 ViewGroup 中使用 addView?

Posted

技术标签:

【中文标题】如何在 ViewGroup 中使用 addView?【英文标题】:How to use addView in ViewGroup? 【发布时间】:2011-08-05 05:33:02 【问题描述】:

我想使用 ViewGroup 类并向其中添加视图。那么我们怎样才能做到这一点呢?

类似这样的东西 ::

public class DrawView extends View    
   private static final String TAG = "DrawView";  
   List<Point> points = new ArrayList<Point>();  
   Paint paint = new Paint();
   public DrawView(Context context)  //2

        super(context);  
        System.out.println("drawwwwwwwwwwwwwwwwwwwwwconnnnnnnnnnnnn");  

        setFocusable(true);  
        setFocusableInTouchMode(true);  
        paint.setColor(Color.MAGENTA);  
        paint.setAntiAlias(true);  

            
    @Override  
    public void onDraw(Canvas canvas)   
        System.out.println("drawwwwwwwwwwwwwwwwwwwww");  
        for (Point point : points)   
            canvas.drawCircle(point.x, point.y, 5, paint);  
            // Log.d(TAG, "Painting: "+point);  

               
      

ViewGrp ::

public class Group extends ViewGroup  
    DrawView draw;  
    SecondView sec;  
    public Group(Context context)   
        super(context);  
        // TODO Auto-generated constructor stub  
        draw=new DrawView(getContext());  
        sec=new SecondView(getContext());  
        addView(draw);  
        addView(sec);  
        System.out.println("hellloooooooo"); //4  
      

    @Override  
    protected void onLayout(boolean changed, int l, int t, int r, int b)   
         // TODO Auto-generated method stub  
        System.out.println("hiiiiiiiiii layoutttttttttt"); //6  
      


   

主要活动:

 @Override  
     public void onCreate(Bundle savedInstanceState)   
        super.onCreate(savedInstanceState);  
        System.out.println("222222222222222222222"); //1  
        grp=new Group(this);  
        setContentView(grp);  
        System.out.println("1111111111111111111"); //5  
      

第二个视图::

 public class SecondView extends View    

     private static final String TAG = "DrawView2";  

    Paint paint = new Paint();  
    public SecondView(Context context)  //3  
        super(context);  
        System.out.println("secccccccccccccccccccccccccccccccconnnnnnnn");  
        setFocusable(true);  
        setFocusableInTouchMode(true);  
        paint.setColor(Color.MAGENTA);  
        paint.setAntiAlias(true);  

         
    @Override  
     public void onDraw(Canvas canvas)   
        canvas.drawColor(Color.BLUE);  
        // Log.d(TAG, "Painting: "+point);  
        System.out.println("seccccccccccccccc1");  
          

请指导我把addView写在正确的地方

谢谢 sneha

【问题讨论】:

【参考方案1】:

你的意思是ViewGroup.addView(View, LayoutParams)吗?

这里有一个关于如何使用ViewGroups 的简短guide,也许这就是您想要的。

【讨论】:

ViewGroup.addView(view) 我这里没有使用任何 LayoutParams...不能完成吗?? 我想知道 ViewGroup 中的控制流程是如何或从哪里开始执行的,就像从 onDraw() 中查看它一样

以上是关于如何在 ViewGroup 中使用 addView?的主要内容,如果未能解决你的问题,请参考以下文章

[Android FrameWork 6.0源码学习] ViewGroup的addView函数分析

viewgroup用addview添加的view不显示问题

Android自己定义组件系列——自己定义View及ViewGroup

[android] 界面切换的核心方法

Androd 性能优化之布局优化

自定义View进阶-手绘地图