我有一个ListView可以有一个或多个可点击的项目。当我应用旋转动画时,单击的坐标对应于ListView项目的原始位置。例如,纵向模式中一个项目旋转180度的列表将使项目在屏幕底部倒置,但当单击屏幕顶部时,该项目会获得单击事件。 180度只是我想要移动任意角度的一个例子。 我已经查看了所有的listView属性,但没有一个对可点击的坐标没有任何影响。我会假设willChangeTransformationMatrix会做的伎俩,但它不,也无效或invalidateViews。是否有我忽略的一个属性,或者我会如何将坐标移至正确的位置?安卓 - 点击旋转的ListView给出错误的坐标
由于点击时
样本代码 - 列表项正确突出,旋转与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;
}
});
}
}
我想当我问到“我将如何将坐标移到正确的位置?”通过“正确”我的意思是新近轮换的地方,几乎任何人都希望他们是(在实际点击的项目下)。任何想法? 谢谢 – JA1 2010-08-25 03:33:51
@ JA1:第1步是让你确定如何有一个横向的ListView,没有任何动画。如果你不能在没有动画的情况下做到这一点,你也不能用动画来完成它。由于我没有意识到你可以有一个横向的'ListView',我怀疑你需要修改你的UI计划。 – CommonsWare 2010-08-25 04:36:21
这是非常令人失望的,我曾经看过其他旋转w/out动画的方法,但只发现了如何去ImageViews。我也尝试过动画一个imageView,在屏幕上移动onTouch,并且坐标也不跟着它,你必须重新触摸原始位置重新动画。这似乎是一个巨大的限制,但我仍然认为我忽略了一些简单的东西,或者可能有一些方法来调整坐标。我的意思是一个带有> 10个滚动浏览的ListView的ListView会在项目向外滚动时向位置做一些调整,类似于动画 – JA1 2010-08-25 06:19:12