为什么要有这个,当然是为了 copy 啊啊啊啊  

https://github.com/Trinea/android-open-project    开源project搜集

0. 强烈推荐的2个库,   NineOldAndroids+ ListViewAnimations

https://github.com/JakeWharton/NineOldAndroids
    
ListViewAnimations 带Item显示动画的ListView,动画包括底部飞入、其他方向斜飞入、下层飞入、渐变消失、滑动删除等 ---- **** 
项目地址:https://github.com/nhaarman/ListViewAnimations
Demo地址:https://play.google.com/store/apps/details?id=com.haarman.listviewanimations




1. android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新
ListView、ViewPager、WevView、ExpandableListView、GridView、(Horizontal)ScrollView、Fragment上下左右拉动刷新。
项目地址:https://github.com/chrisbanes/Android-PullToRefresh
Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refreshview-demo.apk?raw=true
 
3. DropDownListView 下拉刷新及滑动到底部加载更多ListView
项目地址:https://github.com/Trinea/AndroidCommon
Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/TrineaAndroidDemo.apk?raw=true
文档介绍:http://www.trinea.cn/?p=523
 
4. DragSortListView 拖动排序的ListView
同时支持ListView滑动item删除,各个Item高度不一、单选、复选、CursorAdapter做为适配器、拖动背景变化等
项目地址:https://github.com/bauerca/drag-sort-listview
Demo地址:https://play.google.com/store/apps/details?id=com.mobeta.android.demodslv
 
5. SwipeListView 支持定义ListView左右滑动事件,支持左右滑动位移,支持定义动画时间
项目地址:https://github.com/47deg/android-swipelistview
Demo地址:https://play.google.com/store/apps/details?id=com.fortysevendeg.android.swipelistview
 
6. Android-SwipeToDismiss 滑动Item消失ListView
项目地址:https://github.com/romannurik/Android-SwipeToDismiss
支持3.0以下版本见:https://github.com/JakeWharton/SwipeToDismissNOA
Demo地址:https://github.com/JakeWharton/SwipeToDismissNOA/SwipeToDismissNOA.apk/qr_code
 
7. StickyListHeaders GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView,支持快速滑动,支持Android2.3及以上
项目地址:https://github.com/emilsjolander/StickyListHeaders
APP示例:Android 4.0联系人
效果图:https://raw.github.com/emilsjolander/StickyListHeaders/master/demo.gif
 
8. pinned-section-listview GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView
项目地址:https://github.com/beworker/pinned-section-listview
效果图:https://raw.github.com/beworker/pinned-section-listview/master/screen1.png
 
9. PinnedHeaderListView GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView
项目地址:https://github.com/JimiSmith/PinnedHeaderListView
 
10. QuickReturnHeader ListView/ScrollView的header或footer,当向下滚动时消失,向上滚动时出现
项目地址:https://github.com/ManuelPeinado/QuickReturnHeader
Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/quick-return-header-demo.apk?raw=true
 
 11. IndexableListView ListView右侧会显示item首字母快捷索引,点击可快速滑动到某个item
项目地址:https://github.com/woozzu/IndexableListView
Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/indexable-listview.apk?raw=true
 
12. CustomFastScrollView ListView快速滑动,同时屏幕中间PopupWindows显示滑动到的item内容或首字母
项目地址:https://github.com/nolanlawson/CustomFastScrollViewDemo
效果图:https://raw.github.com/nolanlawson/CustomFastScrollViewDemo/master/example.png
 
13. Android-ScrollBarPanel ListView滑动时固定的Panel指示显示在scrollbar旁边
项目地址:https://github.com/rno/Android-ScrollBarPanel
效果展示:https://github.com/rno/Android-ScrollBarPanel/raw/master/demo_capture.png
 
14. SlideExpandableListView 用户点击listView item滑出固定区域,其他item的区域收缩
项目地址:https://github.com/tjerkw/Android-SlideExpandableListView
Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/slide-expandable-listView-demo.apk?raw=true
 
15. JazzyListView ListView及GridView item以特殊动画效果进入屏幕,效果包括grow、cards、curl、wave、flip、fly等等
项目地址:https://github.com/twotoasters/JazzyListView
Demo地址:https://play.google.com/store/apps/details?id=com.twotoasters.jazzylistview.sample
效果展示:http://lab.hakim.se/scroll-effects/
 

16. DevsmartLib-Android 横向ListView
项目地址:https://github.com/dinocore1/DevsmartLib-Android
Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/horizontal-listview-demo.apk?raw=true

17.multichoiceAdapter 多选的adapter,一种比原生adapter更简单的实现,记录选项总数和背景高亮
项目地址: https://github.com/ManuelPeinado/MultiChoiceAdapter
Demo地址:https://play.google.com/store/apps/details?id=com.dpizarro.nfc.basic
                          https://play.google.com/store/apps/details?id=com.projectsexception.myapplist


18. Cards-UI 卡片式View,支持单个卡片,item为卡片的ListView
项目地址:https://github.com/afollestad/Cards-UI
Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/cards-ui-demo.apk?raw=true
 
19. cardslib 卡片式View,支持单个卡片,item为卡片的ListView和GridView
项目地址:https://github.com/gabrielemariotti/cardslib
Demo地址:https://play.google.com/store/apps/details?id=it.gmariotti.cardslib.demo


20.HorizontalVariableListView 支持Item宽度不一致的ListView
项目地址:https://github.com/sephiroth74/HorizontalVariableListView

21.ListBuddies 双列循环滚动的 ListView
项目地址:https://github.com/jpardogo/ListBuddies
讲解文章:http://blog.chengyunfeng.com/?p=573


22.LinearListView用LinearLayout实现的ListView,可解决多个ListView并存的问题以及横向滚动的List
项目地址:https://github.com/frankiesardo/LinearListView


23.EnhancedListView

支持横向滑动滑动删除列表项以及撤销删除的ListView,该项目的前身是SwipeToDismissUndoList
项目地址:https://github.com/timroes/EnhancedListView
Demo地址:https://play.google.com/store/apps/details?id=de.timroes.android.listviewdemo&rdid=de.timroes.android.listviewdemo


24.Smoothie异步加载数据的listView和GridView
项目地址:https://github.com/lucasr/smoothie


25.QuickReturnListView快速返回的ListView
项目地址:https://github.com/LarsWerkman/QuickReturnListView


26.SuperListView超级ListView,提供了很多实用效果的ListView像滑动删除,无数据时的默认Layout显示
项目地址:https://github.com/dommerq/SuperListview


27.ListViewTipsAndTricks 关于ListView的一些指点和技巧
项目地址:https://github.com/cyrilmottier/ListViewTipsAndTricks



29.超轻量!安卓实现多item抽屉效果动画 

https://github.com/AndroidMsky/ElasticLayout


30. https://github.com/zhuyuqiang2017/Animation  ListView 入场动画


31.android笔记listview item加载动画( 左边划入 )  


Android之NineOldAndroids实现绚丽的ListView左右滑动删除Item效果


1. ListView 删除item动画 (删除某一项Item后,上部分保持不动,下部分依次往上移直至合并)  (add item的动画, 将这个反向来)
2. 设置listview 的简单平移或者缩放动画
3. ListView  item 上移动画 
4. ListView的渐变,淡入和淡出 第一个Item和最后一个Item (OnScrollListener监听)

5. ListView 滑动时,其他控件联动变化  或者 联动变色 (OnScrollListener监听)


1. ListView 删除item动画 (删除某一项Item后,上部分保持不动,下部分依次往上移直至合并)  (add item的动画, 将这个反向来)

(1)  删除某一项数据时,触发此方法 

  private void deleteCell(final View v, final int index) { 
       
        //执行完动画,删除item
        AnimationListener al = new AnimationListener() {  
            @Override  
            public void onAnimationEnd(Animation arg0) {  
                
		ListData.remove(index);
		listView.remove(index);  
		ViewHolder vh = (ViewHolder) view.getTag();  
                vh.needInflate = true;  
                mMyAnimListAdapter.notifyDataSetChanged();  
            }  
            @Override public void onAnimationRepeat(Animation animation) {}  
            @Override public void onAnimationStart(Animation animation) {}  
        };  
  
        //开始执行 animation
        collapse(v, al);  
    }  


	private void collapse(final View v, AnimationListener listenenr) {  
	   
	    //获取当前view的高度
	    final int initialHeight = v.getMeasuredHeight();  
	  
	    Animation anim = new Animation() {  

                //实现动画
		@Override  
		protected void applyTransformation(float interpolatedTime, Transformation t) {  
		    
		    // interpolatedTime  0 ---> 1
		    if (interpolatedTime == 1) {  //interpolatedTime == 1.0f
			v.setVisibility(View.GONE);  
		    }  
		    else {  
		        //慢慢高度缩小
			v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);  
			//刷新自身view
			v.requestLayout(); 

                        //可以继续设置透明,旋转等效果
		    }  
		}  

		@Override  
		public boolean willChangeBounds() {  
		    return true;  
		}  
	    };  
	  
	    //设置 listener
            anim.setAnimationListener(listenenr);
	    //动画时间 1秒
	    anim.setDuration(1000);  
            //开始动画
	    v.startAnimation(anim);  
	}  


(2) 属性动画实现  (add item的动画, 将这个反向来)

public static AnimatorSet buildListRemoveAnimator(final View view, final List list, final MyAnimListAdapter adapter, final int index) {  
        
	AnimatorListener al = new AnimatorListener() {  
  
            @Override  
            public void onAnimationStart(Animator animation) {  
                // TODO Auto-generated method stub  
            }  
  
            @Override  
            public void onAnimationRepeat(Animator animation) {  
                // TODO Auto-generated method stub  
            }  
  
            @Override  
            public void onAnimationEnd(Animator animation) {  
                // TODO Auto-generated method stub  
                list.remove(index);  
                ViewHolder vh = (ViewHolder) view.getTag();  
                vh.needInflate = true;  
  
                adapter.notifyDataSetChanged();  
            }  
  
            @Override  
            public void onAnimationCancel(Animator animation) {  
                // TODO Auto-generated method stub
            }  
        };  
  
        AnimatorSet animatorSet = new AnimatorSet();  
        Animator anim = ObjectAnimator.ofFloat(view, "rotationX", 0, 90);  
        Animator animb = ObjectAnimator.ofFloat(view, "alpha", 1, 0);  
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);  
        final int height = view.getMeasuredHeight();  
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {  
  
            @Override  
            public void onAnimationUpdate(ValueAnimator animation) {  
                // TODO Auto-generated method stub  
                if (animation.getAnimatedFraction() >= 1) {  
                    view.setVisibility(View.GONE);  
                }  
                else {  
                    view.getLayoutParams().height = height  
                            - (int) (height * animation.getAnimatedFraction());  
                    view.requestLayout();  
                }  
            }  
        });  
  
        anim.setDuration(ANIMATION_DURATION);  
        animb.setDuration(ANIMATION_DURATION);  
        valueAnimator.setDuration(ANIMATION_DURATION + ANIMATION_DURATION + 100);  
        animatorSet.playTogether(anim, animb, valueAnimator);  
        animatorSet.addListener(al);  
        return animatorSet;  
    }




2. 设置listview 的简单平移或者缩放动画

<ListView
    android:layoutAnimation="@anim/listviewtranslate2"  --layout动画
    android:id="@+id/lv_taskcenter"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:background="@color/title_bg_color"
    android:cacheColorHint="#00000000"
    android:footerDividersEnabled="false"
    android:listSelector="#00000000"></ListView>

<!--位移动画 和差速器-->
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/scale_0_2"
    android:delay="0.5"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
/>

<!-- 动画 -->

@anim/scale_0_2
<translate  xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="100%"
    android:toXDelta="0"
    android:duration="1000"/>

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0"
    android:toXScale="1"
    android:fromYScale="0"
    android:toYScale="1"
    android:duration="1000"/>




3.  ListView item 上移动画 

补间动画,一个向上平移100pix的平移动画和从不显示到显示的的Alpha动画。

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
   //动画///////////////
    if (convertView != null&& position > mPreviousPostition) {
                mPreviousPostition = position; // 初始值为-1
                AnimationSet animationSet = new AnimationSet(false);
                animationSet.setDuration(mAnimDuration);
                animationSet.setAnimationListener(this);
                animationSet.setFillBefore(true);
                animationSet.setStartOffset(mCurrentAnimationCount * mAnimDuration / 3);

                Animation translateAnimation = new TranslateAnimation(
                        Animation.RELATIVE_TO_SELF, 0,
                        Animation.RELATIVE_TO_SELF, 0,
                        Animation.ABSOLUTE, dip2px(mContext, 100),
                        Animation.RELATIVE_TO_SELF, 0);
                translateAnimation.setInterpolator(mInterpolator);
                animationSet.addAnimation(translateAnimation);

                Animation alphaAnimation = new AlphaAnimation(0, 1);
                animationSet.addAnimation(alphaAnimation);

                convertView.startAnimation(animationSet);
                ++mCurrentAnimationCount;
                HANDLER.post(mRunnable);
        }
///结束//
       return convertView;
    }



4.  ListView的渐变,淡入和淡出 第一个Item和最后一个Item (OnScrollListener监听)

public class AlphaListView extends ListView implements AbsListView.OnScrollListener {  
  
    private int height;  
    private int itemHeight;  
  
    public AlphaListView(Context context) {  
        super(context);  
        init();  
    }  
  
    public AlphaListView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        init();  
    }  
  
    public AlphaListView(Context context, AttributeSet attrs, int defStyleAttr) {  
        super(context, attrs, defStyleAttr);  
        init();  
    }  
  
    private void init() {  
        setOnScrollListener(this);  
    }  
  
    @Override  
    public void onScrollStateChanged(AbsListView view, int scrollState) {  
  
    }  
  
    @Override  
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {  
        //将所有View的透明度设置为1  
        for(int i = 0; i < getChildCount(); i++){  
            getChildAt(i).setAlpha(1);  
        }  
        //得到第一个可见的View  
        View v = getChildAt(0);  
        if(v != null){  
            //得到这个v的高度  
            itemHeight = v.getHeight();  
            //得到可见部分  
            int visiableLength = v.getBottom();  
            //得到可见不分部分比例  
            float ratio = visiableLength * 1.0f / itemHeight;  
            v.setAlpha(ratio);  
        }  
        //得到最后一个可见的View  
        v = getChildAt(visibleItemCount - 1);  
        if(v != null){  
            //得到这个v的高度  
            itemHeight = v.getHeight();  
            //得到可见部分  
            int visiableLength = height - v.getTop();  
            //得到可见不分部分比例  
            float ratio = visiableLength * 1.0f / itemHeight;  
            v.setAlpha(ratio);  
        }  
    }  
  
    @Override  
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
        height = MeasureSpec.getSize(heightMeasureSpec);  
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
    }  
}

另外一种设置view属性方式

// 对任何控件 View ListView ScrollView 都适用 , 设置 逐渐消逝; 逐渐消失  
mListView.setVerticalFadingEdgeEnabled(true);  
// 设置消失的距离  
mListView.setFadingEdgeLength(100);


5.  ListView 滑动时, 其他控件联动变化  或者 联动变色 (OnScrollListener监听)

private final int DISTANCE = 500;//滑动的最大位移  
  
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {  
    @Override  
    public void onScrollStateChanged(AbsListView view, int scrollState) {  
  
    }  
  
    @Override  
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {  
        lastVisibleCount = firstVisibleItem + visibleItemCount;  
        int offset = 0;  
        if (firstVisibleItem == 0) {  
            View firstItem = mListView.getChildAt(0);  
            if (firstItem != null) {  
                offset = 0 - firstItem.getTop();  
            }  
        } else {  
            offset = DISTANCE;  
        }  
  
        float percent = (offset * 1f) / (DISTANCE * 1f) ;  
        if (percent >= 0 && percent <= 1) {  

	    // 联动处理
            textView.setAlpha(percent);  
        }  
  
        Log.v("tag_2", "percent = " + percent);  
    }  
});