属于自己的抽屉(初步)

         今天要模仿android抽屉实现,功能如下: 

          点击,然后缓缓弹出窗口,然后再次点击,缓缓收回窗口.


       有几个要点,使用TranslateAnimation传入的参数new TranslateAnimation(fromXDelta,toXDelta,fromYDelta,toYDelta);

其中的xy,是指你要animate的view的左上角坐标




新开线程处理message

		

		thread = new HandlerThread("animatethread");
		thread.start();
		animateHandler = new Handler(thread.getLooper()){
			@Override
			public void handleMessage(Message msg) {
				    
			        if(msg.what == START_CAL_ANIMATE_DOWN){
			        	try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
			            Message rmsg = new Message();
			            rmsg.what = ANIMATE_DOWN;
			            rmsg.setTarget(mHandler);
			            rmsg.sendToTarget();
			        }
			        if(msg.what == START_CAL_ANIMATE_UP){
			        	Message rmsg = new Message();
			        	rmsg.what = ANIMATE_UP;
			        	rmsg.setTarget(mHandler);
			        	rmsg.sendToTarget();
			        	try {
							Thread.sleep(1000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
			        	Message dmsg = new Message();
			        	dmsg.what = ANIMATE_DISAPPEAR;
			        	dmsg.setTarget(mHandler);
			        	dmsg.sendToTarget();
			        }
			}
		};

     下面的是根据接受handlerThread返回的message.what,执行相应的操作.(注只能在主线程操作view,不然会报错,但也有时候可以运行通过.)

                if(flag == ANIMATE_DOWN){
		view.layout(view.getLeft(), screenHeight/2, 
				view.getRight(), screenHeight/2+view.getHeight());
		hasDown = true;
		}
		else if(flag == ANIMATE_UP){
		trans = new TranslateAnimation(0.0f, 0.0f, 0.0f, -screenHeight/2);
		trans.setDuration(1000);
		trans.setInterpolator(context, android.R.anim.linear_interpolator);
		rLayout.startAnimation(trans);
		} 
		if(flag == ANIMATE_DISAPPEAR){
			transientView.setVisibility(View.GONE);
			view.layout(view.getLeft(), 0, 
					view.getRight(), 0+view.getHeight());
			hasDown = false;
		}






         最后是点击事件

public void onClick(View view) {
		this.view = view;
		handle();

		startTime = System.currentTimeMillis();
		if(!hasDown){
		Message msg = new Message();
		msg.what = START_CAL_ANIMATE_DOWN;
		msg.setTarget(animateHandler);
		msg.sendToTarget();
    	trans = new TranslateAnimation(0.0f,0.0f,-screenHeight/2,0);
        trans.setDuration(1000);
        trans.setInterpolator(context, android.R.anim.linear_interpolator);
        rLayout.startAnimation(trans);
    	transientView.setVisibility(View.VISIBLE);
		}
		else{
		Message msg = new Message();
		msg.what = START_CAL_ANIMATE_UP;
		msg.setTarget(animateHandler);
		msg.sendToTarget();
		}
	}


     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值