2

RelativeLayout で scrollBy() を使用して、表示されている画面の右側にあるボタンにスクロールしようとしていますが、空白の画面しか表示されません。画面の境界線上のボタンが切り取られ、スクロールした後も (任意の方向に) 切り取られたままになります。

私は、relativelayout パラメータで WRAP CONTENT と FILL PARENT のほぼすべての組み合わせを試しました。

また、setContentview() で LinearLayout を使用しようとしましたが、機能しませんでした。

ビューを水平方向にスクロールする必要があり、アプリは常に横向きモードに設定されています。

欠落しているボタンを表示できるようにするには、何らかの方法でレイアウトを再描画または更新する必要がありますか?

この種の機能には他のビュー タイプを使用する必要がありますか?

ご意見ありがとうございます。

-ネイサン

上から onCreate() の最後までのすべてのコードを次に示します。

package golfcaddy.tools;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class GolfScoreRel extends Activity implements OnClickListener {

    // Settings file, preferences

    public static final String PREFS_NAME = "golfscore";
    public static final String PREFS_SCORES = "scores";
    public static final String PREFS_BACKGROUND_IMAGE = "backimage";

    SharedPreferences mSettings;

    private int currentX = 0;
    private int currentY = 0;

    int numHoles = 0;
    int numplayers = 0;

      RelativeLayout r1;

      LinearLayout lin;

      public int mLastScoreEntered;

      //manages unique ID's for all view inside Relative layouts
      int viewCount = 1;

     // int holeScoresFront[] = new int[9];
     // int holeScoresFrontb[] = new int[9];
      Button mLastClicked;


      Button exitButton;
      TextView pTotal1;
      TextView pTotal2;


    @Override
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);



       // lin = new LinearLayout(this);
       // lin.setOrientation(LinearLayout.VERTICAL);

        /*    not used yet....
        GolfPlayer p1 = new GolfPlayer("P 1");
        GolfPlayer p2 = new GolfPlayer("P 2");
        GolfPlayer p3 = new GolfPlayer("P 3");
        GolfPlayer p4 = new GolfPlayer("P 4");
        */

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,  
                LayoutParams.WRAP_CONTENT);

        r1 = new RelativeLayout(this); // this layout will be set for contentview 

        r1.setLayoutParams(params);



        numplayers = 4;   //standard golf group
        numHoles = 18;  //standard golf round


        r1.addView(createCard(numplayers,numHoles));

        setContentView(r1);


    }  //end oncreate

どこかから借りた r1.scrollBy() コードは次のとおりです。

Override 
public boolean onTouchEvent(MotionEvent event) {
  switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN: {
          currentX = (int) event.getRawX();
          currentY = (int) event.getRawY();
          break;
      }

      case MotionEvent.ACTION_MOVE: {
          int x2 = (int) event.getRawX();
          int y2 = (int) event.getRawY();

          r1.scrollBy(currentX - x2 , currentY - y2);
          currentX = x2;
          currentY = y2;
          break;
      }   
      case MotionEvent.ACTION_UP: {
          break;
      }
  }
    return true; 
}

スクリーン ショットのメモ: 右側にさらに 8 つのボタンが表示されるはずです。
最後のショットは、DEBUG ボタンが切り取られた 5 人のプレイヤー カードを示しています。

ダン、新しいユーザーとして、私は画像を投稿することを許可されていません. ここで表示してみてください: http://groups.yahoo.com/group/nateandroiddev/photos/album/776905892/pic/list?mode=tn&order=ordinal&start=1&dir=asc

4

1 に答える 1

0

私はすべてのコードを持っていないので、いくつかのことを試してください:

  1. ACTION_MOVE ケースの最後に postInvalidate() を追加してみてください。これにより、画面が再描画されます。

  2. おそらく、onTouchEvent メソッドに super() の呼び出しを追加したいと思うでしょう。

これらが役に立たない場合は、状況のスクリーン ショットが何が起こっているかを明確にするのに役立ちます。画面をスクロールしても無効にされていないように聞こえるため、相対的なレイアウトの古い図面を再描画せずにスクロールしています。

于 2011-01-20T21:20:29.970 に答える