设为首页 加入收藏

TOP

实现QQ iPad客户端的对话框平滑移动的效果(二)
2014-11-24 11:30:41 来源: 作者: 【 】 浏览:2
Tags:实现 iPad 客户端 对话 平滑 移动 效果
ctivity.this.talkdiv.getHeight());
//设置下次从右边出现
MainActivity.this.talkOrentation = MainActivity.this.RIGHT;
}else if((viewLeft + x-temp) < -0.3*MainActivity.this.WINDOW_WIDTH){
//滑向左边
Animation temani = new TranslateAnimation(viewLeft + x-temp,-MainActivity.this.talkdiv.getWidth(),0,0);
temani.setDuration(600);
MainActivity.this.talkdiv.startAnimation(temani);
MainActivity.this.talkdiv.setVisibility(View.INVISIBLE);
MainActivity.this.talkdiv.layout(0, 0,MainActivity.this.talkdiv.getWidth(), MainActivity.this.talkdiv.getHeight());
//设置下次从左边出现
MainActivity.this.talkOrentation = MainActivity.this.LEFT;
}else{
//保持在(0,0)
Animation temani = new TranslateAnimation(viewLeft + x-temp,0,0,0);
temani.setDuration(600);
MainActivity.this.talkdiv.startAnimation(temani);
//使其居中
MainActivity.this.talkdiv.layout(0, 0,MainActivity.this.talkdiv.getWidth(), MainActivity.this.talkdiv.getHeight());
//重绘至中间
MainActivity.this.talkdiv.postInvalidate();
}
break;
}
return true;
}
});


WINDOW_HEIGHT = this.getWindowManager().getDefaultDisplay().getHeight();
WINDOW_WIDTH = this.getWindowManager().getDefaultDisplay().getHeight();
/**
* 为按钮设置监听函数
*/
photo.setOnClickListener(new View.OnClickListener() {


public void onClick(View v) {
// TODO Auto-generated method stub
//只有当其不可见的时候我们才执行动画
if(talkdiv.getVisibility() == View.INVISIBLE){
talkdiv.setVisibility(View.VISIBLE);
//判断应该从哪个方向拉出
int temx = MainActivity.this.talkOrentation -MainActivity.this.talkdiv.getWidth():MainActivity.this.talkdiv.getWidth();
Animation translate = new TranslateAnimation(Animation.RELATIVE_TO_SELF,temx,Animation.RELATIVE_TO_PARENT,0,Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0);
translate.setDuration(200);
MainActivity.this.talkdiv.startAnimation(translate);
}
}
});


//rl.addView(talkdiv);

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}



}


这是整个类所有的源代码,xml文件我就不写了,大家自己慢慢理解吧。


需要注意的几点:


注意onTouch的返回值。改成return true,这样onouch会继续监听


注意取得窗口长宽的方法:


WINDOW_HEIGHT = this.getWindowManager().getDefaultDisplay().getHeight();


WINDOW_WIDTH = this.getWindowManager().getDefaultDisplay().getHeight();


这里我是根据窗口的横坐标的值来判断是否应该自动隐藏,并且以窗口的宽的三分之一为边界


注意动画效果的实现,我使用了TranslateAnimation这个类,但是貌似这个动画执行了之后对象又会返回到原来的位置。所以在动画执行完毕后我将其设置为不可见,这样的话我再将其layout中的位置设置为动画执行完毕后想将其放置 的位置这样的话就能达到想要的效果了。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java中的String判断是不是为空 下一篇Android中显示html标签或者带图片

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C 内存管理 | 菜鸟教 (2025-12-26 20:20:37)
·如何在 C 语言函数中 (2025-12-26 20:20:34)
·国际音标 [ç] (2025-12-26 20:20:31)
·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)