有大半年没有更新过博客了,期间发生了不少的事情,当然对于我技术成长轨迹最重要的还是人生的第一次跳槽,从以前的木蚂蚁到现在的一直播。两家都是超级完美的公司,过的都很开心。始终感恩前行,对于技术始终像是一个傻瓜一样努力。虽然平庸,但是从未放弃。
嗯,从以前的单打独斗到现在有个不错的团队,见识总是有些的。对以前做过的一些项目有过更新的认知。最近一直在折腾android的硬编码,相对于以前来说也算是有那么一点技术含量吧(录屏功能,过些日子总结下,会在博客中记录下)。嗯,不过时不时的还是喜欢做些UI上的小东西,多充实下自己。
最近直播上了一新功能,产品要求我弹一个气泡提示。其实这个很简单,一拍脑子就想用popWindow。确实可以实现这个功能,但。。。。我为什么不能自己做一个类似于这样的呐?闲来无事,随手写一个。。。(有时候想想,技术能力强和差又有什么分别?同样一个功能,你能做,他也能做。但为什么又会分出个高低?细节,那些技术大牛会更注重细节。多些思考)
1、根据目标控件,弹出相应位置的气泡弹框。额好像就是这一个要求咯~啊哈哈哈
1、初始化控件,其中包括了一个TextView和一个小三角的ImageView,因为想做的事在代码中直接new 出这个东西来,所以构造函数直接上直接对相应的参数赋值。然后分别对这两个View 设置相应的东西
public BubbleDialog(Context context, int direction, float targetX, float targetY, float targetWidth, float targetHeight, String text) { super(context); this.direction = direction; this.targetX = targetX; this.targetY = targetY; this.targetWidth = targetWidth; this.targetHeight = targetHeight; this.text = text; initView(context); } /** * 初始化控件 * * @param context */ public void initView(Context context) { //文字设置 tv_center_text = new TextView(context); tv_center_text.setId(R.id.tv_center_text); tv_center_text.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); tv_center_text.setBackground(getResources().getDrawable(R.drawable.shape_long_PRess_pic_hite)); //tv_center_text.setPadding(UIUtil.dip2px(context,10),UIUtil.dip2px(context,10),UIUtil.dip2px(context,10),UIUtil.dip2px(context,10)); //图片设置 iv_triangle = new ImageView(context); iv_triangle.setId(R.id.iv_triangle); tv_center_text.setText(text); iv_triangle.setImageDrawable(getResources().getDrawable(R.drawable.pic_hite_triangle)); setDirection(context); }2、设置布局位置(根据小三角的方向)
if (direction == 0) { tv_params = new LayoutParams(UIUtil.dip2px(context, 120), UIUtil.dip2px(context, 30)); iv_params = new LayoutParams(UIUtil.dip2px(context, 10), UIUtil.dip2px(context, 5)); iv_params.addRule(RelativeLayout.BELOW, R.id.tv_center_text); iv_params.addRule(RelativeLayout.CENTER_HORIZONTAL); tv_params.addRule(RelativeLayout.CENTER_HORIZONTAL); }3、设置在父布局的位置
ivate void setPosition(Context context) { if (direction == 0) { this.setX(targetX - UIUtil.dip2px(context, 120) / 2 + targetWidth / 2); this.setY(targetY - UIUtil.dip2px(context, 30)); }4、动画
this.setVisibility(View.VISIBLE); int height = -UIUtil.dip2px(getContext(), 15); animSet = new AnimatorSet(); if (direction == 0) { ObjectAnimator moveUP = ObjectAnimator.ofFloat(this, "translationY", this.getY(), this.getY() + height); moveUP.setDuration(600); ObjectAnimator moveDown = ObjectAnimator.ofFloat(this, "translationY", this.getY() + height, this.getY()); moveDown.setDuration(600); animSet.play(moveDown).after(moveUP); } animSet.start(); animSet.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { if (animetime > 5) { setVisibility(GONE); } else { animetime++; animation.start(); } }}新闻热点
疑难解答