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);
   }

次に、View クラスに OnMeasure() メソッドを実装して View をレンダリングします。私の質問は次のとおりです。これは解決策ですか、それとも私がやろうとしていることは不可能です。ちなみに、このソリューションを実行すると、logcat には次のように表示されます。

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

ここに私のViewクラスがあります

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

ありがとう、解決策を見つけました。次の順序にする必要があります。

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

setContentView(hsv);
于 2013-04-13T15:56:49.503 に答える
1

この投稿が古いことは知っていますが、他の場所で解決策を見つけることができず、自分でやらなければならなかったので、解決策を共有することにしました。そのためのカスタム コンポーネントを作成しました。自由に使用してください。

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

于 2014-03-31T21:14:19.283 に答える
0

レイアウトファイルも投稿してください。

何が起こっていると思いますか?あなたはすでにScrollViewに子を追加していると思います。現在、ScrollView には 1 つの子のみを含めることができます。これは別のコンテナーにすることができ、その子は他のビューを含めることができます。

あなたができることは、ScrollViewから子を削除してから、子がすでに追加されている状態でHorizo ​​ntalScrollViewを追加することです(HSVに)。

ScrollViewおよびHorizo ​​ntalScrollViewのドキュメントを確認してください。

于 2013-04-13T05:31:14.777 に答える