0

在我的应用程序中,我有这样的布局:

1)主视图可以移动和拖动。

2) 一些控制器可以添加到主视图内部。他们的位置可以设置为TopLeft或其他。这里的TopLeft意思是相对于主视图。(见这张图片

现在我尝试通过扩展来实现这一点ViewGroup,而 themain View和 thecontrollers都是从View.

这就是我现在所做的:

class MyViewContainer extends ViewGroups{
   @Override
   public void onLayout(boolean changed,int l,int t,int b, int r){

      for(int i=0,len=getChildCounts,i<len;i++){
        View v=getChildAt(i);
        if(v instanceof MainView){
           v.layout(l,t,b,r);
        }
        else if(v instanceof MyController){
          //here do not now know how to layout the childs according to their position
        }
      }
   }
}
abstract MyController extends View{
}
class ZoomController extends MyController{
    @Override
    public void onDraw(Canvas c){

    }
}
class AnotherController extends MyController{
    @Override
    public void onDraw(Canvas c){

    }
}
class MainView extends View{
    @Override
    public void onDraw(Canvas c){

    }
}

如您所见,我不知道如何布局MyControllers. 因为我不完全知道controller. 因为控制器的大小取决于它的绘制方式。

怎么做?

4

1 回答 1

0

试试这个。为此,主视图必须位于控制器之前。

class MyViewContainer extends ViewGroups{
    @Override
    public void onLayout(boolean changed,int l,int t,int b, int r){
        View masterView = null;
        for(int i=0,len=getChildCounts,i<len;i++){
            View v=getChildAt(i);
            if(v instanceof MainView){
                masterView = v;
                v.layout(l,t,b,r);
            }
            else if(v instanceof MyController){
                // Layout your views here.
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                if (masterView != null && topLeft) {
                    params.addRule(RelativeLayout.ALIGN_LEFT, masterView.getId());
                    params.addRule(RelativeLayout.ALIGN_TOP, masterView.getId());
                }
                if (masterView != null && bottomRight) {
                    params.addRule(RelativeLayout.ALIGN_RIGHT, masterView.getId());
                    params.addRule(RelativeLayout.ALIGN_BOTTOM, masterView.getId());
                }
                v.setLayoutParams(params);
            }
        }
    }
}
于 2013-05-06T08:20:59.410 回答