android 的list中按上/下键时,实现item滑动效果 RT,现在item焦点的移动很难看,如果实现滑动的效果呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如现在我有一个list,按上下键,焦点会跟着移动要把移动变成滑动,让移动的过程变的平滑一点 不好意思,还是没能完全理解你的意思我猜测是你想 通过上下键来 换listView 里面 item的位置对吧?简单的做法是 ,将需要显示的内容交换,然后 刷新 adapter 就可以了。比如,你listview 显示的是 数组 a[10] 的内容,交换 item 1 和 item 2 的位置,实际可以交换 a[10] 中 a[0] 和 a[1]的值 我理解了你的意思,实际上我也想这么干,但一直没找到方法。我看过苹果的TV,焦点的移动是有过渡的,而android里面的焦点移动是个突变的过程,焦点从一个item到另一个item几乎是瞬移,很生硬。 对,楼上的说的对,不知道有没有什么好的解决方案?准备参考GestureDetector的实现 这个例子很多的我不废话了 看资料:http://archive.cnblogs.com/a/2079253/ yiyaaixuexi,这个不对哦我的意思是,按上下键移动List的焦点,焦点的移动是带滑动效果的不知道你们有没有看过GoogleTV里面的焦点移动,都是很平滑的那种?现在就是想要在List里面把焦点的移动做得平滑点 没做过,应该要重写一下ListView里的按键处理的焦点切换。 修改这个的话应该需要extends ListView,覆写Trackball的滑动事件处理(建议参照下源码进行修改) 很简单,继承下ListView,自己实现ListView就行了然后增加一个事件,用 Scroller来实现滑动的方法 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { /** * 思路:每单击一个ListItem的时候,设置该ListItem中的TextView.setSelected(true) * ,使用positionCache记录上一次单击的ListItem的position,每次单击时判断当前 * position是否等于positionCache,如果相等则不做任何操作,如果不相等,则设置 * 当前position的ListItem跑马灯效果,并去除positionCache对应的ListItem的跑马灯 * 效果。 */ //判断此次单击的position与前一次单击的position是否相等 if(position!=positionCache){ //如果两次单击不是同一个position,判断是否是第一次单击(第一次单击 //不需要取消上一次的跑马灯效果) if(positionCache>=0){ View preView=listView.getChildAt(positionCache); TextView preTv=(TextView) preView.findViewById(R.id.title);//上一次单击的TextView preTv.setSelected(false); //取消跑马灯效果 preView.setBackgroundDrawable(null);//去掉背景图片 } TextView tv=(TextView) view.findViewById(R.id.title);//本次单击的TextView tv.setSelected(true); //设置跑马灯效果 view.setBackgroundResource(R.drawable.icon);//设置单击后的背景图片 positionCache=position; //缓存每次单击的position } } });楼主可以看看setSelected方法的使用。 恩,这种按一下 上下键的效果已经可以了,我还需要用上下键(onkey事件)来模拟onfly list.setOnKeyListener(new OnKeyListener(){ @Override public boolean onKey(View v, int keyCode, KeyEvent event) { Log.i("huangpanhuangpan", "onKey"); switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: TranslateAnimation animation = new TranslateAnimation(gLeft, getLeft(), gTop, getTop()); animation.setDuration(500); animation.setFillAfter(true); iv.startAnimation(animation); gTop = getTop(); gLeft = getLeft(); break; case KeyEvent.KEYCODE_DPAD_DOWN: TranslateAnimation animation1 = new TranslateAnimation(gLeft, getLeft(), gTop, getTop()); animation1.setDuration(500); animation1.setFillAfter(true); iv.startAnimation(animation1); gTop = getTop(); gLeft = getLeft(); break; } return false; } });private int getTop(){ return list.getSelectedView().getTop(); } private int getLeft(){ return list.getSelectedView().getLeft(); }这样在List中,按上下键达到滑动的效果,大家有什么更好的方法吗? 你好,请问你代码里面的iv指的是哪个iv??? android的R文件中,没有id是怎么回事啊? AlertDialog如何不让背景自动变暗 请教:如何实现麦克风的loopback? SQLite中怎么写有条件的查询啊? android增强短信的一个bug 求助,Android怎么调试程序啊,设置了断点 dialog问题 android showdialog废弃问题 android下C函数调用arm汇编函数的问题 【坐标】根据经纬度获取城市名称 求各位大侠给些学习android意见或建议。 . 求教:架设repo+git本地服务器管理android代码
我不废话了 看资料:
http://archive.cnblogs.com/a/2079253/
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
/**
* 思路:每单击一个ListItem的时候,设置该ListItem中的TextView.setSelected(true)
* ,使用positionCache记录上一次单击的ListItem的position,每次单击时判断当前
* position是否等于positionCache,如果相等则不做任何操作,如果不相等,则设置
* 当前position的ListItem跑马灯效果,并去除positionCache对应的ListItem的跑马灯
* 效果。
*/
//判断此次单击的position与前一次单击的position是否相等
if(position!=positionCache){
//如果两次单击不是同一个position,判断是否是第一次单击(第一次单击
//不需要取消上一次的跑马灯效果)
if(positionCache>=0){
View preView=listView.getChildAt(positionCache);
TextView preTv=(TextView) preView.findViewById(R.id.title);//上一次单击的TextView
preTv.setSelected(false); //取消跑马灯效果
preView.setBackgroundDrawable(null);//去掉背景图片
}
TextView tv=(TextView) view.findViewById(R.id.title);//本次单击的TextView
tv.setSelected(true); //设置跑马灯效果
view.setBackgroundResource(R.drawable.icon);//设置单击后的背景图片
positionCache=position; //缓存每次单击的position
}
}
});楼主可以看看setSelected方法的使用。
list.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("huangpanhuangpan", "onKey");
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
TranslateAnimation animation = new TranslateAnimation(gLeft, getLeft(), gTop, getTop());
animation.setDuration(500);
animation.setFillAfter(true);
iv.startAnimation(animation);
gTop = getTop();
gLeft = getLeft();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
TranslateAnimation animation1 = new TranslateAnimation(gLeft, getLeft(), gTop, getTop());
animation1.setDuration(500);
animation1.setFillAfter(true);
iv.startAnimation(animation1);
gTop = getTop();
gLeft = getLeft();
break;
}
return false;
}
});
private int getTop(){
return list.getSelectedView().getTop();
}
private int getLeft(){
return list.getSelectedView().getLeft();
}这样在List中,按上下键达到滑动的效果,大家有什么更好的方法吗?