Android-щелчок повернутого ListView дает неправильные координаты

1

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

Спасибо

Примеры элементов списка кода выделяются правильно при нажатии, вращаются с помощью 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;
        }
      });
  }
}
Теги:
animation

2 ответа

1

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

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

1

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

  • 0
    Я думаю, когда я спросил "как бы я переместил координаты в нужное место?" под «правильным» я имел в виду недавно повернутое место, где почти любой человек мог бы ожидать их (под элементом, который фактически щелкают). Любая идея? Спасибо
  • 0
    @ JA1: Шаг № 1 для вас, чтобы определить, как иметь боковой ListView , без каких-либо анимаций. Если вы не можете сделать это без анимации, вы также не можете сделать это с анимацией. Поскольку я не знаю, каким образом вы можете иметь боковой ListView , я подозреваю, что вам нужно будет пересмотреть свои планы пользовательского интерфейса.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню