RT,现在item焦点的移动很难看,如果实现滑动的效果呢?

解决方案 »

  1.   

    比如现在我有一个list,按上下键,焦点会跟着移动要把移动变成滑动,让移动的过程变的平滑一点
      

  2.   

    不好意思,还是没能完全理解你的意思我猜测是你想 通过上下键来 换listView 里面 item的位置对吧?简单的做法是 ,将需要显示的内容交换,然后 刷新 adapter 就可以了。比如,你listview 显示的是 数组 a[10] 的内容,交换 item 1 和 item 2 的位置,实际可以交换 a[10] 中 a[0] 和 a[1]的值
      

  3.   

    我理解了你的意思,实际上我也想这么干,但一直没找到方法。我看过苹果的TV,焦点的移动是有过渡的,而android里面的焦点移动是个突变的过程,焦点从一个item到另一个item几乎是瞬移,很生硬。
      

  4.   

    对,楼上的说的对,不知道有没有什么好的解决方案?准备参考GestureDetector的实现
      

  5.   

    这个例子很多的
    我不废话了 看资料:
    http://archive.cnblogs.com/a/2079253/
      

  6.   

    yiyaaixuexi,这个不对哦我的意思是,按上下键移动List的焦点,焦点的移动是带滑动效果的不知道你们有没有看过GoogleTV里面的焦点移动,都是很平滑的那种?现在就是想要在List里面把焦点的移动做得平滑点
      

  7.   

    没做过,应该要重写一下ListView里的按键处理的焦点切换。
      

  8.   

    修改这个的话应该需要extends ListView,覆写Trackball的滑动事件处理(建议参照下源码进行修改)
      

  9.   

    很简单,继承下ListView,自己实现ListView就行了然后增加一个事件,用 Scroller来实现滑动的方法
      

  10.   


    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方法的使用。
      

  11.   

    恩,这种按一下  上下键的效果已经可以了,我还需要用上下键(onkey事件)来模拟onfly
      

  12.   


    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中,按上下键达到滑动的效果,大家有什么更好的方法吗?
      

  13.   

    你好,请问你代码里面的iv指的是哪个iv???