AlphaAnimation的使用---控件显示(隐藏)时的属性动画

来源:互联网 发布:网络项目 编辑:程序博客网 时间:2024/05/01 17:59

这里直接贴代码,mListViewListener用来在滑动的时候发消息给handler显示控件。doOnScrollStateChange()用于在listView停止滑动时,发消息给Handler隐藏控件。





protected void doOnScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stub      super.doOnScrollStateChanged(view, scrollState);if(MusicUtils.sGnGiFlag){switch(scrollState){case OnScrollListener.SCROLL_STATE_IDLE:    isScrolling = false;    if(!isTouchOnListView){Message msg = Message.obtain();msg.what = MSG_DISMISS_INDEXVIEW;mIndexViewVisibilityHandler.sendMessageDelayed(msg, INDEXVIEW_SHOW_LAST_TIME);}else{mIndexViewVisibilityHandler.removeCallbacksAndMessages(null);}break;case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:    isScrolling = true;    break;}}}


 private static final int MSG_DISMISS_INDEXVIEW = 0;        private static final int MSG_SHOW_INDEXVIEW = 1;Handler mIndexViewVisibilityHandler  = new Handler(Looper.getMainLooper()){            int animationDuration = 500;@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);switch(msg.what){case MSG_DISMISS_INDEXVIEW:if(mAmigoAlphabetIndexView.getVisibility() != View.VISIBLE)return;AlphaAnimation dismissAlphaAnimation = new AlphaAnimation(mAmigoAlphabetIndexView.getAlpha(), 0);dismissAlphaAnimation.setDuration(animationDuration);dismissAlphaAnimation.setAnimationListener(new AnimationListener(){@Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stubmAmigoAlphabetIndexView.setAlpha(0);mAmigoAlphabetIndexView.setVisibility(View.INVISIBLE);}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}});mAmigoAlphabetIndexView.clearAnimation();mAmigoAlphabetIndexView.startAnimation(dismissAlphaAnimation);break;case MSG_SHOW_INDEXVIEW:LogUtil.i(TAG, "MSG_SHOW_INDEXVIEW");if(!getIsShowIndexer())return;AlphaAnimation showAlphaAnimation;if(mAmigoAlphabetIndexView.getVisibility() == View.VISIBLE){showAlphaAnimation = new AlphaAnimation(mAmigoAlphabetIndexView.getAlpha(), 1);showAlphaAnimation.setDuration((long)((1-mAmigoAlphabetIndexView.getAlpha())*animationDuration));}else{showAlphaAnimation = new AlphaAnimation(0, 1);showAlphaAnimation.setDuration(animationDuration);}showAlphaAnimation.setAnimationListener(new AnimationListener(){@Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stubmAmigoAlphabetIndexView.setVisibility(View.VISIBLE);mAmigoAlphabetIndexView.setAlpha(1);}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}});mAmigoAlphabetIndexView.clearAnimation();mAmigoAlphabetIndexView.startAnimation(showAlphaAnimation);break;}}                }; 


private boolean isTouchOnListView = false;        private boolean isScrolling = false;        OnTouchListener mListViewListener = new View.OnTouchListener() {            int minYDistance = 40;            float startY = 0;                        @Override            public boolean onTouch(View v, MotionEvent event) {                // TODO Auto-generated method stub                if(mAmigoAlphabetIndexView.getVisibility() == View.INVISIBLE && MotionEvent.ACTION_MOVE == event.getAction()){                    if(Math.abs(event.getRawY() - startY) > minYDistance){                        mIndexViewVisibilityHandler.removeCallbacksAndMessages(null);                    mIndexViewVisibilityHandler.sendEmptyMessage(MSG_SHOW_INDEXVIEW);                    }                                    }else if(MotionEvent.ACTION_DOWN == event.getAction()){                    startY = event.getRawY();                    isTouchOnListView = true;                }else if(MotionEvent.ACTION_UP == event.getAction()){                    isTouchOnListView = false;                     if(!isScrolling){                        Message msg = Message.obtain();                        msg.what = MSG_DISMISS_INDEXVIEW;                        mIndexViewVisibilityHandler.sendMessageDelayed(msg, INDEXVIEW_SHOW_LAST_TIME);                        }else{                            mIndexViewVisibilityHandler.removeCallbacksAndMessages(null);                        }                }                return false;            }        };



0 0
原创粉丝点击