2014-10-11 51 views
5

我想要实现从列表交换ListView项与动画像XE货币应用如何交换带有动画的ListView项目?

XE animation

当英镑,英镑用户轻敲该行会上升侧,适合于INR - 与印度卢比动画和行INR - 印度卢比将取代英镑 - 英镑的地方

我已经在列表视图中尝试过一个动画(在列表视图中使用的标题),那么它是工作完美的,但问题是,标题也滚动了并与列表视图下来,我希望固定在顶部和下面的列表视图(或任何视图)可以滚动列表

我曾尝试一个修正观点在相对布局上面,并保持在那个时候动画顶视图下方的列表视图中工作,但只里面没有列表视图列表视图外的

我们如何可以实现在android系统?

+0

看到这个项目:https://github.com/terlici/DragNDropList – 2015-02-24 11:36:49

+0

@ y.feizi:这是库项目,给我链接演示使用这个库 – Jayesh 2015-02-24 11:46:59

回答

1

前段时间我的问题很相似。我需要一个页面,在那里我可以重新安排条目(音乐歌曲曲目)。因此,这里是我的实现:

我AllTracksFragment,允许重新排序跟踪

public class AllTracksFragment extends SupportFragmentBase { 

    DynamicListView allTracksListView; 

    private ArrayList<Track> allTracksList = new ArrayList<>(); 
    TracksListViewAdapter allTracksAdapter; 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_all_tracks, container, false); 
     setHasOptionsMenu(true); 

     allTracksListView = (DynamicListView)rootView .findViewById(R.id.allTracksListView); 

     Track track1 = new Track(); // Track is simple model class 
     track1.trackName = "Winter\'s Coming (Acoustic) 1"; 
     track1.trackId = "47580057"; 

     Track track2 = new Track(); 
     track2.trackName = "Winter\'s Coming (Acoustic) 2"; 
     track2.trackId = "47580057"; 

     Track track3 = new Track(); 
     track3.trackName = "Winter\'s Coming (Acoustic) 3"; 
     track3.trackId = "47580057"; 

     allTracksList.add(track1); 
     allTracksList.add(track2); 
     allTracksList.add(track3); 

     allTracksAdapter = new TracksListViewAdapter(allTracksList, eventBus); 
     allTracksListView.setTracksList(allTracksList); //SEE DynamicListView class 
     allTracksListView.setAdapter(allTracksAdapter); 
     allTracksListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

     return rootView; 
    } 
} 

而且AllTracksFragment布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.myapp.views.DynamicListView 
     android:id="@+id/allTracksListView" 
     android:layout_marginTop="12dp" 
     android:scrollbars="none" 
     android:divider="@null" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</RelativeLayout> 

TracksLi stViewAdapter(如果需要):

public final class TracksListViewAdapter extends BaseListViewArrayAdapter<PlayTrackView, Track> { // extended version of simple BaseAdapter 

    final int INVALID_ID = -1; 

    public TracksListViewAdapter(final List<Track> tracks) { 
     super(tracks == null ? new ArrayList<Track>(0) : tracks); 
     if (tracks != null) { 
      for (int i = 0; i < tracks.size(); ++i) { 
       mIdMap.put(tracks.get(i), i); 
      } 
     } 
    } 

    public PlayTrackView createNewView(final Context context, final int position) { 
     return new PlayTrackView(context); // PlayTrackView - is an extension of FrameLayout 
    } 

    HashMap<Track, Integer> mIdMap = new HashMap<>(); 

    @Override 
    public long getItemId(int position) { 
     if (position < 0 || position >= mIdMap.size()) { 
      return INVALID_ID; 
     } 

     Track item = (Track) getItem(position); 
     return mIdMap.get(item); 
    } 

    @Override 
    public boolean hasStableIds() 
    { 
     return android.os.Build.VERSION.SDK_INT < 20; 
    } 
} 

PlayTrackView的.java

public class PlayTrackView extends FrameLayout implements IItemDisplayer<Track> { 

    public PlayTrackView(Context context) { 
     super(context); 
     LayoutInflater.from(context).inflate(R.layout.play_track_view, this); 
    } 

    public PlayTrackView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     LayoutInflater.from(context).inflate(R.layout.play_track_view, this); 
    } 

    public PlayTrackView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     LayoutInflater.from(context).inflate(R.layout.play_track_view, this); 
    } 

    @Override 
    public void displayItem(Track track) { 

    } 
} 

轨道的.java

public class Track { 
    public String trackId; 
    public String trackName; 
} 

IItemDisplayer接口

public interface IItemDisplayer<TItem> { 
    public void displayItem(TItem item); 
} 

BaseListViewAdapter

+0

什么是@Inject这里?你使用哪个库?它是注释吗? – Jayesh 2015-02-24 12:12:13

+0

@InjectView它来自黄油刀。它只意味着DynamicListView allTracksListView =(DynamicListView)getFragmentView()。findViewById(R.id.allTracksListView); (更短,更容易阅读的形式+更有效的一个,据我所知)(更新答案,以避免这种注入) – 2015-02-24 12:15:00

+0

好吧,但无法找到PlayTrackView,Track,BaseListViewArrayAdapter – Jayesh 2015-02-24 12:22:03

2

为什么另起炉灶?有一些处理ListView的文档和结构良好的库。例如ListViewAnimations是最好的一个,IMO。

特点

  • 物品外观的动画在ListViewsGridViews,其他AbsListViews
    • 内置动画包括AlphaSwingRightInSwingLeftInSwingBottomInSwingRightInScaleIn
    • 可以轻松添加其他动画
    • 支持StickyListHeaders,可以轻松添加其他实现。
  • 刷卡到辞退,横扫到辞退与上下文撤消
  • 拖动和拖放重新排序This is what you need
  • 动画除了项目
  • 顺利拓展您的项目揭示更多内容

enter image description here

+0

推荐的[library](https:// github。 com/nhaarman/ListViewAnimations)已弃用。 – 2018-01-16 12:11:24