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

这里直接贴代码,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;
			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				super.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(){

						@Override
						public void onAnimationStart(Animation animation) {
							// TODO Auto-generated method stub
						}

						@Override
						public void onAnimationEnd(Animation animation) {
							// TODO Auto-generated method stub
							mAmigoAlphabetIndexView.setAlpha(0);
							mAmigoAlphabetIndexView.setVisibility(View.INVISIBLE);
						}

						@Override
						public 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(){

						@Override
						public void onAnimationStart(Animation animation) {
							// TODO Auto-generated method stub
						}

						@Override
						public void onAnimationEnd(Animation animation) {
							// TODO Auto-generated method stub
							mAmigoAlphabetIndexView.setVisibility(View.VISIBLE);
							mAmigoAlphabetIndexView.setAlpha(1);
						}

						@Override
						public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值