2

我有一个类来显示一个表格,我希望它可以水平和垂直滚动,我已经看到了一些解决方案,但我无法实现它们,我将我的视图放在一个 Horizo​​ntalScrollView 中,这让我可以做水平滚动,现在我正在尝试将 Horizo​​ntalScrollView 设置为 ScrollView 的子项。像这样的东西。

    ApuestasScoreCard draw;

    public class ApuestasScore extends Activity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     draw = new ApuestasScoreCard(this);
     draw.setBackgroundColor(Color.WHITE);

         ScrollView sv = new ScrollView(this)
     HorizontalScrollView hsv = new HorizontalScrollView(this);
         sv.addView(hsv);
     hsv.addView(draw);

     setContentView(hsv);
   }

然后在我的视图类中,我实现了 OnMeasure() 方法来呈现视图。我的问题是:这是一个解决方案还是我想要做的事情是不可能的。顺便说一句,当我运行这个解决方案时,logcat 说:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

这是我的视图类

public class ApuestasScoreCard extends View {
ApuestasScore apuestas;

public ApuestasScoreCard(Context context) {
    super(context);
    this.apuestas = (ApuestasScore) context;
    setFocusable(true);
    setFocusableInTouchMode(true);

            //..Not Important Code

 /* (non-Javadoc)
 * @see android.widget.HorizontalScrollView#onMeasure(int, int)
 */
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // TODO Auto-generated method stub
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        int width = MeasureSpec.getSize(widthMeasureSpec+2000);
        int height = MeasureSpec.getSize(heightMeasureSpec+500);
        setMeasuredDimension(width, height);

}

    @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    width = w / 26f;
    height = h / 29f;
    width2 = w / 6.5f;
    height2 = h / 5f;
    getRect(selX, selY, selRect);

    super.onSizeChanged(w, h, oldw, oldh);
}

    @Override
protected void onDraw(Canvas canvas) {
    // Draw the background...FFFF00 23F607



            for (int i = 0; i < 29; i++) {
                if (i < 3) {
                    canvas.drawLine(0, i * height, getWidth(), i * height, light);// Horizontales

                    canvas.drawLine(0, i * height + 1, width * 2, i * height + 1,
                            hilite);
                }
                if (i == 2 || i == 5 || i == 8 || i == 11 || i == 14 || i == 17
                        || i == 20 || i == 23 || i == 26 || i == 29) {
                    canvas.drawLine(0, i * height, getWidth(), i * height, dark);// Horizontales

                    canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1,
                            hilite);
                }
            }
            for (int i = 0; i < 29; i++) {

                canvas.drawLine(width * 2, i * height, getWidth() + 100,
                        i * height, light);// Horizontales

                canvas.drawLine(width * 2, i * height + 1, getWidth() + 100, i
                        * height + 1, hilite);

                if (i > 1 && i < 12) {
                    canvas.drawLine(i * width, 0, i * width, getHeight(), light);

                    canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(),
                            hilite);
                }
    }

}
    }
4

4 回答 4

1

我知道这篇文章很旧,但由于我无法在其他地方找到解决方案并且不得不自己做,我决定分享我的解决方案,我为此制作了一个自定义组件,请随意使用它:

https://gist.github.com/androidseb/9902093

于 2014-03-31T21:14:19.283 回答
1

谢谢,我找到了解决方案,必须按以下顺序:

ScrollView sv = new ScrollView(this);
HorizontalScrollView hsv = new HorizontalScrollView(this);
hsv.addView(sv);
sv.addView(draw);

setContentView(hsv);
于 2013-04-13T15:56:49.503 回答
0

在 xml 中采用水平滚动视图,然后在一个布局中线性或相对地覆盖此水平滚动视图,然后将垂直滚动视图放入 xml,因此最终您可以在水平和垂直方向上移动您的 xml。试试看。

于 2013-04-13T05:50:38.990 回答
0

请也发布您的布局文件。

我认为发生的事情是您已经在ScrollView中添加了一个孩子。现在 ScrollView 只能包含一个子项,它可以是另一个容器,而该容器又可以包含其他视图。

您可以做的是从ScrollView中删除任何子项,然后添加已添加子项的Horizo ​​ntalScrollView (到 HSV)。

查看ScrollViewHorizo ​​ntalScrollView 的文档。

于 2013-04-13T05:31:14.777 回答