Android-单击旋转的 ListView 会给出错误的坐标

标签 android animation

我有一个 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;
        }
      });
  }
}

最佳答案

您得到了正确的坐标。 RotateAnimation 仅影响 View 的呈现,而不影响其布局或触摸事件。

关于Android-单击旋转的 ListView 会给出错误的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562319/

相关文章:

java - 如何节省上次调用方法的时间

更新 Firefox 后 CSS3 动画波动

android - 动画背景,如 Timely 闹钟应用程序

android - 无法解析方法 getActivity()

Android ViewModel - "by activityViewModels"在 "by viewModels"之前调用

android - Google map 图 block 无法加载

java - 打开/关闭给定网络的飞行模式。

javascript - 如何在纯javascript中添加animate.css类onclick事件?

javascript - 使用 jquery 为 SVG 的填充设置动画?

css - svg 动画浏览器支持