Android-щелчок повернутого ListView дает неправильные координаты - PullRequest
1 голос
/ 25 августа 2010

У меня есть ListView, в котором может быть один или несколько элементов, на которые можно нажимать. Когда я применяю анимацию поворота, щелкающие координаты соответствуют исходной позиции элементов ListView. Например, список с одним элементом в портретном режиме, повернутый на 180 градусов, будет иметь элемент вверх дном внизу экрана, но элемент получает событие щелчка, когда я нажимаю на верхнюю часть экрана. 180 градусов - это просто пример, я хочу иметь возможность перемещаться на произвольный угол. Я просмотрел все свойства listView, но, похоже, ни одно из них не влияет на интерактивные координаты. Я бы предположил, что willChangeTransformationMatrix справится с задачей, но это не так, и не делает недействительными или недействительными Views. Есть ли свойство, которое я пропускаю, или как мне перенести координаты в нужное место?

Спасибо

образцы элементов списка кодов подсвечиваются правильно при щелчке, поворачиваются с помощью dpad_center, после того, как повернутые элементы подсвечиваются при нажатии на исходную позицию. Я пытался анимировать анимацию, animationSet и layoutAnimationController все тот же результат.

public class ToDoList extends Activity {
    ListView myListView;
  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final ListView myListView = new ListView(this);

    final ArrayList<String> todoItems = new ArrayList<String>();
    todoItems.add(0, "asdf");
    todoItems.add(0, "1234");

    // Create the array adapter to bind the array to the listview
    final ArrayAdapter<String> aa;
    aa = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,todoItems);

    // Bind the array adapter to the listview.
    myListView.setAdapter(aa);
    setContentView(myListView);
    myListView.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
          if (event.getAction() == KeyEvent.ACTION_DOWN)
            if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
            {
              aa.notifyDataSetChanged();
              //myEditText.setText("");
              RotateAnimation  ranim = new RotateAnimation(0f, 180f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
              ranim.setDuration(1000);  
              ranim.setFillAfter(true);
              ranim.willChangeBounds();
              ranim.willChangeTransformationMatrix();
              ranim.setInterpolator(new LinearInterpolator());
              myListView.startAnimation(ranim);
              AnimationSet set = new AnimationSet(true);
              set.addAnimation(ranim);
              set.willChangeTransformationMatrix();
              set.setInterpolator(new LinearInterpolator());
              //set.setFillAfter(true);
              //set.setFillEnabled(true);
              LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f);
              controller.setInterpolator(new LinearInterpolator());
              myListView.setLayoutAnimation(controller);
              return true;
            }
          return false;
        }
      });
  }
}

Ответы [ 2 ]

1 голос
/ 10 июля 2012

начиная с соты, вы можете использовать новый API-интерфейс анимации, который позволяет вам выполнять как анимацию, так и реальное перемещение (или вращение, или масштабирование ...) видов.

для более старых версий Android,анимация только меняет способ отображения видов.

1 голос
/ 25 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...