addView无法在Android中运行

时间:2015-03-03 10:55:03

标签: android

以上是Custom ViewGroup中的方法。添加的播放器组件未显示。我无法理解这是错误的。请帮忙

    public void addPlayer(String playerName,String balance,String gender){
            try{
                LayoutParams playerParams = new LayoutParams(PlayerComponent.LayoutParams.WRAP_CONTENT, PlayerView.LayoutParams.WRAP_CONTENT);
                PlayerComponent playerComponent = new PlayerComponent(this.getContext().getApplicationContext());
                playerComponent.setUserNameDisplay(playerName);
                playerComponent.setCountDisplay(balance);
                playerComponent.setLayoutParams(playerParams);
                addView(playerComponent);
            }catch(Exception e){
                Log.d("Ace2three","Exception while adding player");
                e.printStackTrace();
            }
        }

以下是我的自定义视图组中的onLayout方法。

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
final int count = getChildCount();
        int topPosition = 0;
        int leftPosition = 0;
        int rightPosition = 0;
        int bottomPosition = 0;
        int i;
        int j;
        int decrementX = 0;
        int incrementX = 0;
        int verticalGap = 75;
        int width;
        int height;
        View child;
        if( count > 0 ){
            int medium = count/2;
            int gap = getMeasuredWidth()/count;
            if( count == 1 ){
                child = this.getChildAt(0);
                width = child.getMeasuredWidth();
                height = child.getMeasuredHeight();
                leftPosition = getMeasuredWidth()/2 - width/2;
                rightPosition = getMeasuredWidth()  - ( getMeasuredWidth() - ( leftPosition + width ));
                topPosition = 10;
                bottomPosition = getMeasuredHeight() - ( getMeasuredHeight() - (topPosition + height));
                child.layout(leftPosition,topPosition,rightPosition,bottomPosition);
            }
            else if( count%2 == 0 ){
                child = this.getChildAt(0);
                width = child.getMeasuredWidth();
                height = child.getMeasuredHeight();
                gap = getMeasuredWidth()/(count+1);
                decrementX = incrementX = getMeasuredWidth()/2 - width/2;
                for(i=medium,j=medium-1;(i<count && j>=0);i++,j--){
                    child = this.getChildAt(i);
                    width = child.getMeasuredWidth();
                    height = child.getMeasuredHeight();
                    decrementX -= gap;
                    leftPosition = decrementX;
                    rightPosition = getMeasuredWidth() - (getMeasuredWidth() - ( leftPosition + width ));
                    topPosition += verticalGap;
                    bottomPosition = getMeasuredHeight() - ( getMeasuredHeight() - ( topPosition + height ));
                    child.layout(leftPosition,topPosition,rightPosition,bottomPosition);

                    child = this.getChildAt(j);
                    incrementX += gap;
                    leftPosition = incrementX;
                    rightPosition = getMeasuredWidth() - ( getMeasuredWidth() - ( leftPosition + width ));
                    child.layout(leftPosition,topPosition,rightPosition,bottomPosition);
                }
            }
            else if( count%3 == 0 || count%3 == 2 ){
                child = this.getChildAt(medium);
                if( child.getVisibility() != GONE ){
                    width = child.getMeasuredWidth();
                    height = child.getMeasuredHeight();
                    topPosition = 10;
                    leftPosition = getMeasuredWidth()/2 - width/2;
                    bottomPosition = getMeasuredHeight() - ( getMeasuredHeight() - ( topPosition + height ) );
                    rightPosition = getMeasuredWidth() - (getMeasuredWidth() - (leftPosition + width));
                    child.layout(leftPosition,topPosition,rightPosition,bottomPosition);
                    decrementX = leftPosition;
                    incrementX = leftPosition;
                }

                for(i=medium+1,j=medium-1;(i<count && j>=0); i++,j--){
                    child = this.getChildAt(i);
                    width = child.getMeasuredWidth();
                    height = child.getMeasuredHeight();
                    decrementX -= gap;
                    leftPosition = decrementX;
                    rightPosition = getMeasuredWidth() - ( getMeasuredWidth() - ( width + leftPosition ));
                    topPosition += verticalGap;
                    bottomPosition = getMeasuredHeight() - ( getMeasuredHeight() - (height + topPosition));
                    child.layout(leftPosition,topPosition,rightPosition,bottomPosition);

                    child = this.getChildAt(j);
                    width = child.getMeasuredWidth();
                    height = child.getMeasuredHeight();
                    incrementX += gap;
                    leftPosition = incrementX;
                    rightPosition = getMeasuredWidth() - ( getMeasuredWidth() - (width + leftPosition));
                    child.layout(leftPosition,topPosition,rightPosition,bottomPosition);
                }
            }

我不明白的是它第一次有效。但是,一旦我删除其中一个视图并尝试添加它,它就不起作用。

0 个答案:

没有答案