有弹性的ListView
生活随笔
收集整理的這篇文章主要介紹了
有弹性的ListView
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
有彈性的ListView
package com.weichuang.china.video.view;import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.animation.TranslateAnimation; import android.widget.ListView;public class MyListView extends ListView {private Context context;private boolean outBound = false;private int distance;private int firstOut; public MyListView(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;}public MyListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);this.context = context;}public MyListView(Context context) {super(context);this.context = context;}GestureDetector gestureDetector = new GestureDetector(new OnGestureListener() {public boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}public void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {int firstPos = getFirstVisiblePosition();int lastPos = getLastVisiblePosition();int itemCount = getCount();// outbound Topif (outBound && firstPos != 0 && lastPos != (itemCount - 1)) {scrollTo(0, 0);return false;}View firstView = getChildAt(firstPos);if (!outBound)firstOut = (int) e2.getRawY();if (firstView != null&& (outBound || (firstPos == 0&& firstView.getTop() == 0 && distanceY < 0))) {// Record the length of each slidedistance = firstOut - (int) e2.getRawY();scrollTo(0, distance / 2);return true;}if (lastPos != (itemCount - 1))return false;View lastView = getChildAt(lastPos - firstPos);int GridHeight = getHeight(); if (lastView != null && (outBound || ((lastView.getBottom() + 8) >= GridHeight && distanceY > 0))) { distance = firstOut - (int) e2.getRawY();scrollTo(0, distance);return true;} return false;}public void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}public boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {// TODO Auto-generated method stubreturn false;}public boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn false;}});@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {int act = event.getAction();if ((act == MotionEvent.ACTION_UP || act == MotionEvent.ACTION_CANCEL)&& outBound) {outBound = false;}if (!gestureDetector.onTouchEvent(event)) {outBound = false;} else {outBound = true;}Rect rect = new Rect();getLocalVisibleRect(rect);TranslateAnimation am = new TranslateAnimation(0, 0, -rect.top, 0);am.setDuration(300);startAnimation(am);scrollTo(0, 0);return super.dispatchTouchEvent(event);} }總結(jié)
以上是生活随笔為你收集整理的有弹性的ListView的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 网络请求详解
- 下一篇: View类的xml属性和相关方法说明