Android 方便快捷简单自定义提示气泡

来源:互联网 发布:淘宝字体图标 编辑:程序博客网 时间:2024/04/28 16:19

写在前面的话

有大半年没有更新过博客了,期间发生了不少的事情,当然对于我技术成长轨迹最重要的还是人生的第一次跳槽,从以前的木蚂蚁到现在的一直播。两家都是超级完美的公司,过的都很开心。始终感恩前行,对于技术始终像是一个傻瓜一样努力。虽然平庸,但是从未放弃。

正经的总结下

嗯,从以前的单打独斗到现在有个不错的团队,见识总是有些的。对以前做过的一些项目有过更新的认知。最近一直在折腾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();                }            }}

当然最后国际惯例上GitHub地址 https://github.com/duanyikang/BubbleDialog

0 0
原创粉丝点击