RelativeLayout создается динамически, я использую .scrollBy (), виды за пределами экрана не видны или не нажаты - PullRequest
2 голосов
/ 20 января 2011

Я использую scrollBy () для RelativeLayout, чтобы попытаться прокрутить до кнопок справа от видимого экрана, но я вижу только пустой экран. Кнопки на границе экрана обрезаются и остаются прокрученными после прокрутки (в любом направлении).

Я пробовал почти каждую комбинацию WRAP CONTENT и FILL PARENT в параметрах относительного размещения.

Я также пытался использовать LinearLayout в setContentview (), он не работал.

Мне нужно, чтобы представление прокручивалось по горизонтали, и приложение всегда должно быть в горизонтальном режиме.

Нужно ли каким-либо образом перерисовывать или обновлять макет, чтобы отображались отсутствующие кнопки?

Нужно ли использовать какой-либо другой тип представления для такой функциональности?

Спасибо за любой вклад.

* 1015 Натан *

Вот весь код сверху вниз до конца 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 кнопок справа.
Последний снимок показывает карту 5 игроков с зажатой кнопкой DEBUG.

Черт, как новый пользователь, я не могу публиковать изображения. попробуйте просмотреть их здесь: http://groups.yahoo.com/group/nateandroiddev/photos/album/776905892/pic/list?mode=tn&order=ordinal&start=1&dir=asc

1 Ответ

0 голосов
/ 21 января 2011

Несколько вещей, чтобы попробовать, так как у меня нет всего кода:

  1. Попробуйте добавить postInvalidate () в конец вашего дела ACTION_MOVE. Это приведет к перерисовке экрана.

  2. Возможно, вы хотите добавить вызов super () в свой метод onTouchEvent.

Если это не поможет, снимок экрана вашей ситуации поможет прояснить, что происходит. Похоже, что после прокрутки экран не становится недействительным, поэтому вы прокручиваете старый чертеж относительного макета без перерисовки.

...