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

时间:2010-08-25 01:55:41

标签: android animation

我有一个ListView,可以有一个或多个可点击的项目。当我应用旋转动画时,单击的坐标对应于ListView项目的原始位置。例如,将纵向模式中的一个项目旋转180度的列表将使项目在屏幕底部上下颠倒,但是当我单击屏幕顶部时,该项目将获得单击事件。 180度只是我希望能够移动任意角度的一个例子。 我查看了所有listView属性,但似乎没有任何影响可点击的坐标。我会假设willChangeTransformationMatrix可以做到这一点,但它没有,也没有使视图无效或无效。是否有我正在俯瞰的房产或如何将坐标移动到正确的位置?

由于

示例代码 - 列表项在单击时正确突出显示,使用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 个答案:

答案 0 :(得分:1)

您正在获得正确的坐标。 RotateAnimation仅影响视图的渲染,而不影响其布局或触摸事件。

答案 1 :(得分:1)

从蜂窝开始,您可以使用新的动画API,它允许您同时进行视图的动画和实际移动(或旋转或缩放......)。

对于旧版本的android,动画只会改变视图的显示方式。