android仿QQ右上角微信显示未读消息数量个数,求助

后使用快捷导航没有帐号?
平板/笔记本
云服务专区
怎样让QQ或者微信在桌面图标右上角显示未读消息条数
&略有小成&
来自:浏览器
就是跟小米手机那样,右上角显示有几条未读的,求大神
width:100%">
&渐入佳境&
来自:浏览器
同求,谢谢
width:100%">
&登堂入室&
来自:浏览器
只有升了4.4的包才行
width:100%">
&登堂入室&
来自:浏览器
看吧就这样,我的就是更新了才有的
%2Fstorage%2Fsdcard1%2FPictures%2FScreenshots%2FScreenshot_-10-00-47.png (77.98 KB, 下载次数: 13)
10:02 上传
width:100%">
&已臻大成&
来自:浏览器
楼主你好。长按桌面,然后点击桌面设置,然后选择图标角标,然后选择微信,然后就可以正常使用了。
width:100%">
&禁止发言&
来自:浏览器
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
width:100%">
&自成一派&
来自:浏览器
emui3.1现已支持角标显示,可以升级到最新版本后使用(注意查看更新说明最低系统版本要求)
长按空白桌面--更多设置--图标角标(QQ、微信建议更新到较新版本)
如需要向部队反馈或提供后续信息,请在我的回贴下直接点击“回复”
花粉们的理解和支持是我们继续的最大动力
width:100%">
&渐入佳境&
来自:浏览器
zhongwenpeng 发表于
看吧就这样,我的就是更新了才有的
更新了也没有,果断回退140
width:100%">
&自成一派&
来自:浏览器
emui3.1现已支持角标显示,可以升级到最新版本后使用(注意查看更新说明最低系统版本要求)
长按空白桌面-- ...
5.10.16版本角标显示设置无QQ应用(QQ已是最新版本
菜鸟一枚,但喜欢用实践去检验真理。威信:
width:100%">
&独步江湖&
来自:浏览器
楼主你好。长按桌面,然后点击桌面设置,然后选择图标角标,然后选择微信,这样就可以了
width:100%">
1000万花粉
纪念花粉俱乐部注册花粉数超过1000万
好基友勋章
花粉好机友,注册时间大于99天
花粉特种部队荣耀勋章
关注华为花粉俱乐部微信公众平台——“华为花粉俱乐部”
在职斑竹的身份勋章,感谢斑竹的辛勤劳动
养老斑竹的身份勋章,感谢斑竹的辛勤劳动
相亲角人文随拍青岛之旅河北白石山细看世界鸣沙山随手拍大观公园之夏
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
没有最新动态
关注花粉俱乐部
联系我们:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利&nbsp&#8250&nbsp&nbsp&#8250&nbsp
BezierDemo源码解析-实现qq消息气泡拖拽消失的效果
中我们比较了DraggableFlagView和BezierDemo两个项目的区别,提到将对其中一个做源码分析,那么我们就来分析BezierDemo的源码吧,因为这个项目的源码最简单,可以更直接的去分析核心的东西。但是效果还是DraggableFlagView好些。我尽量讲的详细些,满足更多的初学者。这篇文章主要分析拉伸效果的实现。源码结构BezierDemo只有两个java文件其中MainActivity.java是程序界面,而BezierView.java是实现了粘连拉伸效果的类。MainActivity.javapackage&github.chenupt.
import&android.app.A
import&android.os.B
public&class&MainActivity&extends&Activity&{
&&&&@Override
&&&&protected&void&onCreate(Bundle&savedInstanceState)&{
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.activity_main);
}activity_main.xml&LinearLayout&xmlns:android=&/apk/res/android&
&&&&xmlns:tools=&/tools&
&&&&android:layout_width=&match_parent&
&&&&android:layout_height=&match_parent&
&&&&android:orientation=&vertical&
&&&&tools:context=&.MainActivity&&
&&&&&github.chenupt.bezier.BezierView
&&&&&&&&android:layout_width=&match_parent&
&&&&&&&&android:layout_height=&match_parent&
&&&&&&&&android:background=&@android:color/transparent&&/&
&/LinearLayout&这里有个疑问:为啥BezierView控件的layout_width和layout_height为match_parent。 这是因为这个代码很粗糙,哈哈。好了,从上面的activity可以看出,所有的功能都是BezierView控件实现的,因此我们直接转向BezierView.java先贴代码package&github.chenupt.
import&android.content.C
import&android.graphics.C
import&android.graphics.C
import&android.graphics.P
import&android.graphics.P
import&android.graphics.PorterD
import&android.graphics.R
import&android.graphics.drawable.AnimationD
import&android.util.AttributeS
import&android.view.MotionE
import&android.view.V
import&android.view.ViewG
import&android.widget.FrameL
import&android.widget.ImageV
&*&Created&by&&on&11/20/14.
&*&Description&:&custom&layout&to&draw&bezier
public&class&BezierView&extends&FrameLayout&{
&&&&//&默认定点圆半径
&&&&public&static&final&float&DEFAULT_RADIUS&=&20;
&&&&private&Paint&
&&&&private&Path&
&&&&//&手势坐标
&&&&float&x&=&300;
&&&&float&y&=&300;
&&&&//&锚点坐标
&&&&float&anchorX&=&200;
&&&&float&anchorY&=&300;
&&&&//&起点坐标
&&&&float&startX&=&100;
&&&&float&startY&=&100;
&&&&//&定点圆半径
&&&&float&radius&=&DEFAULT_RADIUS;
&&&&//&判断动画是否开始
&&&&boolean&isAnimS
&&&&//&判断是否开始拖动
&&&&boolean&isT
&&&&ImageView&exploredImageV
&&&&ImageView&tipImageV
&&&&public&BezierView(Context&context)&{
&&&&&&&&super(context);
&&&&&&&&init();
&&&&public&BezierView(Context&context,&AttributeSet&attrs)&{
&&&&&&&&super(context,&attrs);
&&&&&&&&init();
&&&&public&BezierView(Context&context,&AttributeSet&attrs,&int&defStyleAttr)&{
&&&&&&&&super(context,&attrs,&defStyleAttr);
&&&&&&&&init();
&&&&private&void&init(){
&&&&&&&&path&=&new&Path();
&&&&&&&&paint&=&new&Paint();
&&&&&&&&paint.setAntiAlias(true);
&&&&&&&&paint.setStyle(Paint.Style.FILL_AND_STROKE);
&&&&&&&&paint.setStrokeWidth(2);
&&&&&&&&paint.setColor(Color.RED);
&&&&&&&&LayoutParams&params&=&new&LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,&ViewGroup.LayoutParams.WRAP_CONTENT);
&&&&&&&&exploredImageView&=&new&ImageView(getContext());
&&&&&&&&exploredImageView.setLayoutParams(params);
&&&&&&&&exploredImageView.setImageResource(R.drawable.tip_anim);
&&&&&&&&exploredImageView.setVisibility(View.INVISIBLE);
&&&&&&&&tipImageView&=&new&ImageView(getContext());
&&&&&&&&tipImageView.setLayoutParams(params);
&&&&&&&&tipImageView.setImageResource(R.drawable.skin_tips_newmessage_ninetynine);
&&&&&&&&addView(tipImageView);
&&&&&&&&addView(exploredImageView);
&&&&@Override
&&&&protected&void&onLayout(boolean&changed,&int&left,&int&top,&int&right,&int&bottom)&{
&&&&&&&&exploredImageView.setX(startX&-&exploredImageView.getWidth()/2);
&&&&&&&&exploredImageView.setY(startY&-&exploredImageView.getHeight()/2);
&&&&&&&&tipImageView.setX(startX&-&tipImageView.getWidth()/2);
&&&&&&&&tipImageView.setY(startY&-&tipImageView.getHeight()/2);
&&&&&&&&super.onLayout(changed,&left,&top,&right,&bottom);
&&&&private&void&calculate(){
&&&&&&&&float&distance&=&(float)&Math.sqrt(Math.pow(y-startY,&2)&+&Math.pow(x-startX,&2));
&&&&&&&&radius&=&-distance/15+DEFAULT_RADIUS;
&&&&&&&&if(radius&&&9){
&&&&&&&&&&&&isAnimStart&=&
&&&&&&&&&&&&exploredImageView.setVisibility(View.VISIBLE);
&&&&&&&&&&&&exploredImageView.setImageResource(R.drawable.tip_anim);
&&&&&&&&&&&&((AnimationDrawable)&exploredImageView.getDrawable()).stop();
&&&&&&&&&&&&((AnimationDrawable)&exploredImageView.getDrawable()).start();
&&&&&&&&&&&&tipImageView.setVisibility(View.GONE);
&&&&&&&&//&根据角度算出四边形的四个点
&&&&&&&&float&offsetX&=&(float)&(radius*Math.sin(Math.atan((y&-&startY)&/&(x&-&startX))));
&&&&&&&&float&offsetY&=&(float)&(radius*Math.cos(Math.atan((y&-&startY)&/&(x&-&startX))));
&&&&&&&&float&x1&=&startX&-&offsetX;
&&&&&&&&float&y1&=&startY&+&offsetY;
&&&&&&&&float&x2&=&x&-&offsetX;
&&&&&&&&float&y2&=&y&+&offsetY;
&&&&&&&&float&x3&=&x&+&offsetX;
&&&&&&&&float&y3&=&y&-&offsetY;
&&&&&&&&float&x4&=&startX&+&offsetX;
&&&&&&&&float&y4&=&startY&-&offsetY;
&&&&&&&&path.reset();
&&&&&&&&path.moveTo(x1,&y1);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x2,&y2);
&&&&&&&&path.lineTo(x3,&y3);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x4,&y4);
&&&&&&&&path.lineTo(x1,&y1);
&&&&&&&&//&更改图标的位置
&&&&&&&&tipImageView.setX(x&-&tipImageView.getWidth()/2);
&&&&&&&&tipImageView.setY(y&-&tipImageView.getHeight()/2);
&&&&@Override
&&&&protected&void&onDraw(Canvas&canvas){
&&&&&&&&if(isAnimStart&||&!isTouch){
&&&&&&&&&&&&canvas.drawColor(Color.TRANSPARENT,&PorterDuff.Mode.OVERLAY);
&&&&&&&&}else{
&&&&&&&&&&&&calculate();
&&&&&&&&&&&&canvas.drawColor(Color.TRANSPARENT,&PorterDuff.Mode.OVERLAY);
&&&&&&&&&&&&canvas.drawPath(path,&paint);
&&&&&&&&&&&&canvas.drawCircle(startX,&startY,&radius,&paint);
&&&&&&&&&&&&canvas.drawCircle(x,&y,&radius,&paint);
&&&&&&&&super.onDraw(canvas);
&&&&@Override
&&&&public&boolean&onTouchEvent(MotionEvent&event)&{
&&&&&&&&if(event.getAction()&==&MotionEvent.ACTION_DOWN){
&&&&&&&&&&&&//&判断触摸点是否在tipImageView中
&&&&&&&&&&&&Rect&rect&=&new&Rect();
&&&&&&&&&&&&int[]&location&=&new&int[2];
&&&&&&&&&&&&tipImageView.getDrawingRect(rect);
&&&&&&&&&&&&tipImageView.getLocationOnScreen(location);
&&&&&&&&&&&&rect.left&=&location[0];
&&&&&&&&&&&&rect.top&=&location[1];
&&&&&&&&&&&&rect.right&=&rect.right&+&location[0];
&&&&&&&&&&&&rect.bottom&=&rect.bottom&+&location[1];
&&&&&&&&&&&&if&(rect.contains((int)event.getRawX(),&(int)event.getRawY())){
&&&&&&&&&&&&&&&&isTouch&=&
&&&&&&&&&&&&}
&&&&&&&&}else&if(event.getAction()&==&MotionEvent.ACTION_UP&||&event.getAction()&==&MotionEvent.ACTION_CANCEL){
&&&&&&&&&&&&isTouch&=&
&&&&&&&&&&&&tipImageView.setX(startX&-&tipImageView.getWidth()/2);
&&&&&&&&&&&&tipImageView.setY(startY&-&tipImageView.getHeight()/2);
&&&&&&&&invalidate();
&&&&&&&&if(isAnimStart){
&&&&&&&&&&&&return&super.onTouchEvent(event);
&&&&&&&&anchorX&=&&(event.getX()&+&startX)/2;
&&&&&&&&anchorY&=&&(event.getY()&+&startY)/2;
&&&&&&&&x&=&&event.getX();
&&&&&&&&y&=&&event.getY();
&&&&&&&&return&
}该控件是一个自定义的FrameLayout,之所以不用自定义view,是为了能直接添加显示消息数目的图片。关于成员变量的那部分注释已经比较清楚了,我直接看看init()方法在init方法中首先初始化了画笔paint,这个paint就是绘制粘连拉伸效果的。然后paint初始化代码下面为FrameLayout添加了两个图片:exploredImageView和tipImageView,exploredImageView是在拉断之后显示的气泡,而tipImageView是数字提示,这两个ImageView都只是为了辅助模仿qq,但不是我们要讨论的核心。onLayout()方法非重点,略。calculate()方法这是根据手指拖动位置计算各坐标的的方法,同时还在这里根据坐标点将path路径也定义了:&&&&&&&&path.reset();
&&&&&&&&path.moveTo(x1,&y1);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x2,&y2);
&&&&&&&&path.lineTo(x3,&y3);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x4,&y4);
&&&&&&&&path.lineTo(x1,&y1);这端代码是粘连拉伸效果的核心。一会而我们做的各种实验都是在这里修修改改。onDraw()方法&&&&@Override
&&&&protected&void&onDraw(Canvas&canvas){
&&&&&&&&if(isAnimStart&||&!isTouch){
&&&&&&&&&&&&canvas.drawColor(Color.TRANSPARENT,&PorterDuff.Mode.OVERLAY);
&&&&&&&&}else{
&&&&&&&&&&&&calculate();
&&&&&&&&&&&&canvas.drawColor(Color.TRANSPARENT,&PorterDuff.Mode.OVERLAY);
&&&&&&&&&&&&canvas.drawPath(path,&paint);
&&&&&&&&&&&&canvas.drawCircle(startX,&startY,&radius,&paint);
&&&&&&&&&&&&canvas.drawCircle(x,&y,&radius,&paint);
&&&&&&&&super.onDraw(canvas);
&&&&}这个方法调用了上面的calculate方法,然后根据计算出的值绘制path和圆圈。onTouchEvent()方法这个方法将根据触摸点的位置变化记录必要的位置信息,供calculate()方法计算,同时在必要的地方发送绘制请求。一步一步分解如果讲到这里就结束,你肯定不满意-“我还是没明白贝塞尔曲线是如何应用到里面的呢”。为了彻底明白我们将做几个分解代码的实验。首先我们找到onDraw方法,&&&&@Override
&&&&protected&void&onDraw(Canvas&canvas){
&&&&&&&&if(isAnimStart&||&!isTouch){
&&&&&&&&&&&&canvas.drawColor(Color.TRANSPARENT,&PorterDuff.Mode.OVERLAY);
&&&&&&&&}else{
&&&&&&&&&&&&calculate();
&&&&&&&&&&&&canvas.drawColor(Color.TRANSPARENT,&PorterDuff.Mode.OVERLAY);
&&&&&&&&&&&&canvas.drawPath(path,&paint);
&&&&&&&&&&&&canvas.drawCircle(startX,&startY,&radius,&paint);
&&&&&&&&&&&&canvas.drawCircle(x,&y,&radius,&paint);
&&&&&&&&super.onDraw(canvas);
&&&&}在if(isAnimStart&||&!isTouch){中的代码是拉断之后的效果,不去管他。主要看else中的代码首先调用了calculate()方法,然后调用了&canvas.drawColor(Color.TRANSPARENT,&PorterDuff.Mode.OVERLAY);这个去掉也无所谓。接着绘制了一条带有贝塞尔曲线的封闭路径:&canvas.drawPath(path,&paint);然后分别绘制了两端的圆圈。为了更直观的看出效果,我们将原本&& // 默认定点圆半径&&& public static final float DEFAULT_RADIUS = 20;改成&& // 默认定点圆半径&&& public static final float DEFAULT_RADIUS = 150;这样大点会更清楚的看到拉伸过程,而且拉很长也不会断,拉断的临界点是下面代码决定的:calculate方法中&&&&&&& float distance = (float) Math.sqrt(Math.pow(y-startY, 2) + Math.pow(x-startX, 2));&&&&&&& radius = -distance/15+DEFAULT_RADIUS;&&&&&&& if(radius & 9){&&&&&&&&&&& isAnimStart =更改之后得到的效果如下:你看我都拉了半边屏幕。但是这样仍然难以看到曲线是如何绘制的,这是因为画笔paint的绘制类型是填充模式的,我们改成线条模式:将init()方法改成&&& private void init(){&&&&&&& path = new Path();&&&&&&& paint = new Paint();&&&&&&& paint.setAntiAlias(true);&&&&&& paint.setStyle(Paint.Style.STROKE);&&&&&&& paint.setStrokeWidth(2);&&&&&&& paint.setColor(Color.RED);&&&&&&& ......这样我们就能看到线条是如何组合的了:可以看出的确是两个圆圈和一条封闭的路径组成的。那个数字图片有点碍眼,我们想办法去掉在calculate()方法的适当位置加上&tipImageView.setVisibility(View.GONE);我是加在第三行左右,总之能保证会被执行就行。我不敢说加在这里最合适,我只是单纯的想去掉它而已。下面是去掉之后来回拉伸的变换图:有点猥琐。。。。现在我们将两个圆圈也去掉吧,这两个圆圈仅仅是根据两点之间距离的大小改变了下半径而已(第二个点也改变了圆点坐标)。贝塞尔曲线在中间那部分,让我们看看包含了贝塞尔曲线的path路径的真面目。去掉圆圈只需将ondraw方法的相关代码注释掉:下面是注释之后的效果:这就是我们的path了。回到构建这个path的代码,在calculate方法中:&&&&&&&&path.reset();
&&&&&&&&path.moveTo(x1,&y1);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x2,&y2);
&&&&&&&&path.lineTo(x3,&y3);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x4,&y4);
&&&&&&&&path.lineTo(x1,&y1);其中lineTo方法是绘制直线,quadTo方法就是绘制贝塞尔曲线,准确的说,是绘制二阶贝塞尔曲线。为了能看出path的先后顺序,我们分别定义(x1, y1)为A点(x2, y2)为B点(x3, y3)为C点(x4, y4)为D点(anchorX, anchorY)为X点,这是二阶贝塞尔曲线的控制点,这里有两条二阶贝塞尔曲线,都是同一个控制点。同时在canvas中将这几个点的字母标注出来,具体的做法是调用canvas.drawText,修改具体的代码我就不发了。每个点的显示位置有所偏差(尤其是X点),这是因为canvas.drawText的参数需要根据字符的大小做调整,我为了简便,没有去做,但是这些点你应该知道他们的实际位置,A,B,C,D很好辨认,但是X应该是在中间才对。有了上面那幅图对于这段代码就好理解了&&&&&&&&path.moveTo(x1,&y1);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x2,&y2);
&&&&&&&&path.lineTo(x3,&y3);
&&&&&&&&path.quadTo(anchorX,&anchorY,&x4,&y4);
&&&&&&&&path.lineTo(x1,&y1);拉伸的粘连效果主要取决于quadTo绘制的两条贝塞尔曲线,这两条曲线以他们之间的中间位置为控制点,导致曲线以相同的弧度往内弯曲。当两端的圆圈距离越来越长,控制点的位置以及两条曲线的端点也跟着变化(需要根据距离计算端点和控制点的位置)就形成了橡皮筋的粘连效果。 各坐标点的计算那么现在的最后一个问题是如何寻找这些变化的点。首先我们需要记录手指运动过程中,触摸点的变化情况,在demo中是使用(x,y)来代表这个触摸点,然后根据(startX,startY)(这个点是写死的)计算出控制点的坐标(anchorX,anchorY)代码如下&&&&@Override
&&&&public&boolean&onTouchEvent(MotionEvent&event)&{
&&&&&&&&if(event.getAction()&==&MotionEvent.ACTION_DOWN){
&&&&&&&&&&&&//&判断触摸点是否在tipImageView中
&&&&&&&&&&&&Rect&rect&=&new&Rect();
&&&&&&&&&&&&int[]&location&=&new&int[2];
&&&&&&&&&&&&tipImageView.getDrawingRect(rect);
&&&&&&&&&&&&tipImageView.getLocationOnScreen(location);
&&&&&&&&&&&&rect.left&=&location[0];
&&&&&&&&&&&&rect.top&=&location[1];
&&&&&&&&&&&&rect.right&=&rect.right&+&location[0];
&&&&&&&&&&&&rect.bottom&=&rect.bottom&+&location[1];
&&&&&&&&&&&&if&(rect.contains((int)event.getRawX(),&(int)event.getRawY())){
&&&&&&&&&&&&&&&&isTouch&=&
&&&&&&&&&&&&}
&&&&&&&&}else&if(event.getAction()&==&MotionEvent.ACTION_UP&||&event.getAction()&==&MotionEvent.ACTION_CANCEL){
&&&&&&&&&&&&isTouch&=&
&&&&&&&&&&&&tipImageView.setX(startX&-&tipImageView.getWidth()/2);
&&&&&&&&&&&&tipImageView.setY(startY&-&tipImageView.getHeight()/2);
&&&&&&&&invalidate();
&&&&&&&&if(isAnimStart){
&&&&&&&&&&&&return&super.onTouchEvent(event);
&&&&&&&&anchorX&=&&(event.getX()&+&startX)/2;
&&&&&&&&anchorY&=&&(event.getY()&+&startY)/2;
&&&&&&&&x&=&&event.getX();
&&&&&&&&y&=&&event.getY();
&&&&&&&&return&
&&&&}其中if和else代码块中的的代码和粘连效果无关,这些代码是关于气泡的ImageView显示与消失的。主要就是下面的代码&&&&&&&&invalidate();
&&&&&&&&if(isAnimStart){
&&&&&&&&&&&&return&super.onTouchEvent(event);
&&&&&&&&anchorX&=&&(event.getX()&+&startX)/2;
&&&&&&&&anchorY&=&&(event.getY()&+&startY)/2;
&&&&&&&&x&=&&event.getX();
&&&&&&&&y&=&&event.getY();可以看出在onTouchEvent中,主要工作是记录,坐标点的计算还是在calculate()方法里(不过这里也简单的计算了控制点的坐标(anchorX,anchorY),其实这也可以放到calculate里面)。另外invalidate()方法我觉得还是放在最后比较好。不过没什么大碍,也就是落后一个点而已,你根本感觉不到。而calculate()方法里面对坐标的计算也很简单,没几行代码,结合上面的几幅图应该很容易解出来。这里就不再赘述了。其实整篇文章可以用一句话来概括:粘连效果的关键是由同一个控制点(中间点)“拖住”两条贝塞尔曲线。最后做一点补充,为了将橡皮的效果做的更逼真,这个demo中还动态的改变了两端圆点的半径,当然这也会导致其他点也做相应的改变&&&&&&&&float&distance&=&(float)&Math.sqrt(Math.pow(y-startY,&2)&+&Math.pow(x-startX,&2));
&&&&&&&&radius&=&-distance/15+DEFAULT_RADIUS;
上一篇: 安卓版qq不知道什么时候起加入了一个很有意思的功能,在消息选项卡右上角显示未读提示,这个提示是可以拖拽的,拖拽距离越长就会拉的越细。 原以为很复杂,不过很快就有人实现了,目前实现这种效果的开源项目有两个都是中国人写的,分别是 DraggableFlagView
下一篇: NativeScript是一款使用JavaScript语言来构建跨平台原生移动应用的开源框架,支持iOS、Android和Windows Phone。且NativeScript的使用没有过多繁杂的要求,只需使用自己已经掌握的JavaScript和CSS技能就能开发出真正具有原生用户体验的移动应用。 作为免费开拒绝访问 | www.1398.org | 百度云加速
请打开cookies.
此网站 (www.1398.org) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(38dfdb77a7d543f5-ua98).
重新安装浏览器,或使用别的浏览器2325人阅读
Android(408)

Android开源BezierView:仿QQ未读消息99+条的红色气泡
在移动版的QQ中,如果用户的QQ消息超过99条,会有这样的消息提示气泡(包含拖动动画):
Android第三方开源的BezierView实现了上述QQ的99+条未读消息气泡显示。
Android开源BezierView在github上的项目主页是:
使用Android BezierView只需要写一个布局即可:
&LinearLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&
tools:context=&.MainActivity& &
&github.chenupt.bezier.BezierView
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:background=&@android:color/transparent& /&
&/LinearLayout&
代码运行结果如上图所示。
剩下原作者已经写好,如果在项目开发中需要使用BezierView,直接将github上的项目改变成一个lib然后导入到自己的项目直接使用即可。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:997136次
积分:14044
积分:14044
排名:第869名
原创:433篇
转载:13篇
评论:167条
阅读:10422
(3)(2)(3)(15)(5)(14)(4)(1)(1)(6)(12)(9)(7)(22)(27)(10)(9)(9)(1)(16)(42)(40)(43)(20)(26)(12)(4)(9)(11)(19)(45)

我要回帖

更多关于 android 未读消息数字 的文章

 

随机推荐