Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android单击旋转的ListView会给出错误的坐标_Android_Animation - Fatal编程技术网

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

Android单击旋转的ListView会给出错误的坐标,android,animation,Android,Animation,我有一个列表视图,可以有一个或多个可点击的项目。应用旋转动画时,单击的坐标对应于ListView项的原始位置。例如,如果列表中有一个项目处于纵向模式,旋转180度,则该项目将在屏幕底部倒置,但当我单击屏幕顶部时,该项目将获得单击事件。180度只是一个例子,我希望能够移动任意角度。 我已经浏览了所有的listView属性,但是没有一个对可点击的坐标有任何影响。我假设willChangeTransformationMatrix可以做到这一点,但事实并非如此,它也不会使eviews失效或失效。是否有我

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

谢谢

示例代码-单击时正确高亮显示列表项,使用dpad_中心旋转,单击原始位置时高亮显示旋转后的项。我尝试过为动画、动画集和LayoutImationController设置动画,但结果都是一样的

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;
        }
      });
  }
}
public类ToDoList扩展活动{
列表视图;
/**在首次创建活动时调用*/
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
最终ListView myListView=新ListView(此);
最终ArrayList todoItems=新ArrayList();
添加(0,“asdf”);
添加(0,“1234”);
//创建阵列适配器以将阵列绑定到listview
最终阵列适配器aa;
aa=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,todoItems);
//将阵列适配器绑定到listview。
myListView.setAdapter(aa);
setContentView(myListView);
myListView.setOnKeyListener(新的OnKeyListener(){
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
if(event.getAction()==KeyEvent.ACTION\u向下)
if(keyCode==KeyEvent.keyCode\u DPAD\u CENTER)
{
aa.notifyDataSetChanged();
//myEditText.setText(“”);
RotateAnimation ranim=新的RotateAnimation(0f,180f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
ranim.setDuration(1000);
ranim.setFillAfter(真);
ranim.willChangeBounds();
ranim.willChangeTransformationMatrix();
ranim.setInterpolator(新的LinearInterpolator());
myListView.startAnimation(ranim);
AnimationSet set=新的AnimationSet(真);
set.addAnimation(ranim);
set.willChangeTransformationMatrix();
set.setInterpolator(新的LinearInterpolator());
//set.setFillAfter(true);
//set.setFillEnabled(true);
LayoutImationController=新的LayoutImationController(设置,0.5f);
controller.setInterpolator(新的LinearInterpolator());
myListView.SetLayoutImation(控制器);
返回true;
}
返回false;
}
});
}
}

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

从蜂巢开始,您可以使用新的动画API,该API允许您对视图进行动画和真实移动(或旋转或缩放…)


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

我想当我问“如何将坐标移动到正确的位置?”时,我说的“正确”是指新旋转的位置,几乎所有人都会期望它们出现(在实际单击的项目下)。有什么想法吗?Thanks@JA1:步骤#1是让您决定如何在没有任何动画的情况下拥有一个侧面的
列表视图。如果没有动画无法执行此操作,则也无法使用动画执行此操作。因为我不知道有什么方法可以让你有一个横向的
列表视图
,我怀疑你需要修改你的UI计划。这非常令人失望,我已经研究了其他旋转w/out动画的方法,但只找到了如何对ImageView执行此操作。我还尝试了设置一个imageView的动画,在触摸屏上移动,坐标也不跟随它,你必须重新触摸原始位置才能重新设置动画。这似乎是一个巨大的限制,但我仍然认为我忽略了一些简单的东西,或者有一些方法可以调整坐标。我的意思是,一个滚动超过10个项目的ListView会在项目滚动出视图时对位置进行一些调整,类似于动画