仿Android新版手机QQ底部动态按钮效果
不知道细心的同学注意到没有,新版手机QQ的底部tab按钮特别有意思,当手放在上面的时候,这个按钮可以随手指的移动而改变形状,如下图:
于是我就仿写了一个,其实实现原理也挺简单的,最终的效果图如下:
第一步我们得下载QQ的apk文件,把里面的按钮图片资源解压出来,不过解压之后一看瞬间懵逼了,居然有这么多文件夹,而且还是混淆过后的:
还好机智的我试着搜索tab、menu、selected等关键词后才其中一个文件夹发现了这些图片:
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE: {
changeWhenMove(x, y);
return true;
}
case MotionEvent.ACTION_UP: {
restorePosition();
if (isContain(this, event.getRawX(), event.getRawY())) {
setHasClick(!hasClick);
if (OnMenuClickListener != null) {
OnMenuClickListener.onItemClick(this);
}
}
return true;
}
}
return true;
}
核心代码如上:ACTION_MOVE时移动控件,ACTION_UP时还原至原位置。如果手指抬起的位置在按钮范围内则响应点击事件。这样就简单实现了QQ动态按钮的效果。实际使用也很简单:简单在布局文件中声明,并在代码中设置普通状态的图片id和按下状态的图片的id就行了:
<com.renny.qqmenu.QQMenu
android:id="@+id/avater_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
QQMenu.setImgages(R.drawable.skin_tab_icon_conversation_normal
, R.drawable.skin_tab_icon_conversation_selected
, R.drawable.rvq, R.drawable.rvr);
QQMenu.setOnMenuClickListener(new QQMenu.OnMenuClickListener() {
@Override
public void onItemClick(View view) {
Toast.makeText(MainActivity.this, "Click "+QQMenu.isHasClick(),
Toast.LENGTH_SHORT).show();
}
});
最后贴下github地址,欢迎提交Issues,如果你觉得用的着的话还请点个赞哦。
github:https://github.com/renjianan/QQMenu
原文发布时间为:2018-11-5
本文作者:大头呆
本文来自云栖社区合作伙伴“安卓巴士Android开发者门户”,了解相关信息可以关注“安卓巴士Android开发者门户”。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
一个ViewGroup#dispatchDraw()中的NP分析
0x0 背景 经常在Crash平台上看到一个Crash,通过崩溃日志中的CurActivity字段可以知道崩溃页面是在搜索结果页,然而因为崩溃堆栈中不涉及任何业务代码,所以也很难定位原因。 04-06 10:37:43.610: ERROR/AndroidRuntime(23203): java.lang.NullPointerException 04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2122) 04-06 10:37:43.610: ERROR/AndroidRuntime(23203): at android.view.ViewGroup.drawC
-
下一篇
Android开发 - 掌握ConstraintLayout(四)创建基本约束
上一篇我们介绍了编辑器的基本使用,本文我们介绍创建基本的约束。 "约束"表示View之间的位置关系。当我们在ConstraintLayout布局中创建View时,如果我们没有添加任何约束,虽然在设计视图我们可以拖动它们到任意位置,但是运行后都会在左上角的原点位置,同时代码中也会给出警告: 所以我们必须确保我们的View都被添加了适当的约束。我们常用的约束通常有两种,一种是相对父View的约束,一种是相对其它View的约束。 相对父布局的约束 创建相对布局的约束时比较简单,将对象方位的锚点拖动到对应方位的布局上即可。 这里我将这个按钮放到左上角,距父布局的左方和上方为50dp,在红色方框处可以调整具体的数值。 相对其它布局的约束 创建相对其它View的布局的形式就比较多样化了,结合相对父布局的约束,可以实现出非常复杂的界面。 当创建一个相对其它View的约束时,将锚点拖动到其它View上面的锚点即可。 创建父View约束时将锚点拖到父View边缘即可,创建与其它View约束时是将锚点拖到其它View的锚点上。 我们来举个应用的例子: 比如我们想要一个View相对另一个View居中显示,使...
相关文章
文章评论
共有0条评论来说两句吧...