У меня есть 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;
}
});
}
}
начиная с сотов, вы можете использовать новый API анимации, который позволяет делать как анимацию, так и реальное движение (или поворот или масштабирование,...) представлений.
для более старых версий Android, анимация изменяет отображение только видов.
Вы получаете правильные координаты. RotateAnimation влияет только на рендеринг представления, а не на его макет или события касания.
ListView
, без каких-либо анимаций. Если вы не можете сделать это без анимации, вы также не можете сделать это с анимацией. Поскольку я не знаю, каким образом вы можете иметь боковойListView
, я подозреваю, что вам нужно будет пересмотреть свои планы пользовательского интерфейса.