Android 는 간단 한 드 롭 다운 댐퍼 효과 예제 코드 를 실현 합 니 다.

OS 의 아래 당 김 과 위로 당 김 은 모두 매우 현묘 한 동적 효과 가 나타 날 것 이다.안 드 로 이 드 에 서 는 비슷 한 효 과 를 낼 수 있 지만 조금 다른 점 은 오 버 스크롤 바 이 를 호출 해 비슷 한 댐퍼 효 과 를 구현 하면 맨 윗부분 에 밝 은 영역 이 생 겨 시원 하지 않다 는 점 이다.그래서 이 방법 을 사용 하지 않 고 사용자 정의 방식 으로 바 꾸 기로 했다.
다음은 사용자 정의 컨트롤 의 코드 부분 입 니 다.

public class MyView extends ScrollView {
	//           
	int initY;
	//     
	int deltaY;
	
	int touchY;
	//     item      
	Rect topRect;
	//          item
	View inner;
	//   ImageView             
	int initTop,initButtom;
	int left = 0,top = 0,right = 0,bottom = 0;
	ImageView imageView;
	State state;
	 boolean recordFlag;
	 enum State
	{
		UP,NORMAL,DOWN
	}
	
	 
	boolean isMoving;
	boolean shutScroll;
	private int current_Bottom;
	private int current_Top;
	
	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		state = State.NORMAL;
		topRect=new Rect();
		recordFlag=false;
		
	}
	public void setImageView(ImageView imageView)
	{
		this.imageView=imageView;
	}
	
	//              
	@Override
	protected void onFinishInflate() {
		super.onFinishInflate();
		//              item,          item,                 
		inner=getChildAt(0);
		Log.i("inner", inner.toString());
	}
	//onTouchEvent       true             ,  false          
	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		if(inner!=null)
		{
			commOnTouchEvent(ev);
			
		}
		if(shutScroll)
		{
			return true;
		}else
		{
			return super.onTouchEvent(ev);
		}
		
	}
	private void commOnTouchEvent(MotionEvent ev) {
		switch(ev.getAction())
		{
		case MotionEvent.ACTION_DOWN:
		{
			if(recordFlag==false)
			{
				left=inner.getLeft();
				top=inner.getTop();
				right=inner.getRight();
				bottom=inner.getBottom();
				recordFlag=true;
			}
			
			//            
			initY=(int) ev.getY();
			//   ImageView     
			initTop=imageView.getTop();
			//   ImageView           
			initButtom=imageView.getBottom();
			break;
		}
		
		case MotionEvent.ACTION_MOVE:
		{
			//     
			deltaY=(int) (ev.getY()-initY);
			
			if(deltaY<0)
			{
				//    
				state=State.UP;	
				isMoving=false;
				shutScroll=false;
			}
			else if(deltaY>=0)
			{
				//        , getScrollY 0 ,        down  。
				if(getScrollY()==0)
				{
					//    
					state=State.DOWN;
					isMoving=true;
					shutScroll=true;
				}
				
			}
			
			if(isMoving)
			{
				if (topRect.isEmpty()) {
					
					//          
					topRect.set(left, top,right,bottom);
				}
					
				float inner_move_H = deltaY / 5;
				inner.layout(topRect.left, (int) (topRect.top + inner_move_H),
							topRect.right, (int) (topRect.bottom + inner_move_H));
				float image_move_H = deltaY / 10;
				current_Top = (int) (initTop + image_move_H);
				current_Bottom = (int) (initButtom + image_move_H);
				imageView.layout(imageView.getLeft(), current_Top,
							imageView.getRight(), current_Bottom);
				
			}
			break;
		}
		
		
		case MotionEvent.ACTION_UP:
		{
			if(needToScroll())
			{
				animation();
				
			}
			if(getScrollY()==0)
			{
				/*          ?            :
				 * getScrollY()                  view       Y    。
				 *    ,                    , View     ,View    up,normal;
				 * down    。 View      ,normal down      ,        view 
				 *                。              down   。*/	
				
				state=State.NORMAL;
			}
			break;
		}
		}
		
	}
	private void animation() {
		//         
		TranslateAnimation image_Anim = new TranslateAnimation(0, 0,
				Math.abs(initTop - current_Top), 0);
		image_Anim.setDuration(200);
		imageView.startAnimation(image_Anim);
		imageView.layout(imageView.getLeft(), (int) initTop,
				imageView.getRight(), (int) initButtom);
		//       
		TranslateAnimation inner_Anim = new TranslateAnimation(0, 0,
				inner.getTop(), topRect.top);
		inner_Anim.setDuration(200);
		inner.startAnimation(inner_Anim);
		inner.layout(topRect.left, topRect.top, topRect.right, topRect.bottom);
		//state=State.NORMAL;
		topRect.setEmpty();
	}
	private boolean needToScroll() {
		if(state==State.DOWN)
		{
			return true;
		}
		return false;
	}
}
이상 의 안 드 로 이 드 가 간단 한 드 롭 다운 댐퍼 효 과 를 실현 하 는 예제 코드 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기