美文网首页
android浮标制作

android浮标制作

作者: jackzhoud | 来源:发表于2017-04-27 09:49 被阅读0次

浮标项目

浮标特性

  1. 触摸浮标移动特性
  2. 点击浮标展开特性
  3. 3s内无操作,浮标自动掩藏在两侧(由于浮标只用了一张图片,所以两侧掩藏时只是靠边了)

效果图

demo

实现原理

创建浮标

  1. 获取WindowManager系统服务
  2. 设置浮标显示的参数WindowManager.LayoutParams
  3. 获取浮标布局并添加到WindowManager里面去
  4. 代码示例:
mMansger = (WindowManager)context.getApplicationContext().getSystemService(Activity.WINDOW_SERVICE);
mParams = new WindowManager.LayoutParams();
screen_widht = mMansger.getDefaultDisplay().getWidth();
screen_height = mMansger.getDefaultDisplay().getHeight();

mParams.format = PixelFormat.RGBA_8888;                                                     //图片格式为透明
mParams.type = WindowManager.LayoutParams.TYPE_PHONE;                                       //处于所有应用顶端,状态栏之下
mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;                              //不获取焦点
mParams.gravity = Gravity.LEFT | Gravity.TOP;                                               //左上对齐
mParams.x = float_x;
mParams.y = float_y;                                                                        //相对于上面的原点
mParams.width = LayoutParams.WRAP_CONTENT;
mParams.height = LayoutParams.WRAP_CONTENT;

mFloatLayout = (LinearLayout)LayoutInflater.from(context).inflate(R.layout.float_window, null);
mMansger.addView(mFloatLayout, mParams);

触摸移动

设置浮标移动监听OnTuchListener,监听工作:

  1. 获取当前触摸位置,并将此位置更新至布局updateViewLayout
  2. 代码示例:
floatImage.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        isMove = true;
        if(event.getAction() == MotionEvent.ACTION_DOWN){

            return false;
        }

        //滑动操作
        if(mFloatLayout != null){
            float_x = (int)event.getRawX();
            float_y = (int)event.getRawY();
            int width = mFloatLayout.getWidth();
            int height = mFloatLayout.getHeight();
            if(float_x + width > screen_widht){
                float_x = screen_height - width;
            }

            if(float_y + height > screen_height){
                float_y = screen_height - height;
            }

            //作画默认是从view的左上角画,导致在移动过程中摸不着view  所以要向上和左位置前移就能摸到了
            mParams.x = (float_x - width/2) > 0 ? float_x - width/2 : 0;
            mParams.y = (float_y - height/2) > 0 ? float_y - height/2 : 0;
            mMansger.updateViewLayout(mFloatLayout, mParams);
        }

        /**
         * 抬起默认滑动结束
         */
        if(event.getAction() == MotionEvent.ACTION_UP){
            isMove = false;
            task_restore.postDelayed(retoreFloatView, 3000);                                //3s内无操作进行隐藏工作
        }

        return false;
    }
});

点击监听

  1. 点击就是setOnclickListener,这个很简单就不进行说明了

自动掩藏

  1. 原理:
    利用Handler延时操作执行浮标掩藏工作,其原理就是在滑动时抬起动作和点击事件后,执行掩藏,刷新的最后一步判断浮标是否还有操作,有操作就不掩藏了,反之则掩藏
  2. 代码示例:
 private Runnable retoreFloatView = new Runnable() {
    @Override
    public void run() {

        account_left.setVisibility(View.GONE);
        account_right.setVisibility(View.GONE);
        if(float_x > screen_widht / 2){
            floatImage.setImageDrawable(mContext.getDrawable(R.drawable.xy_icon));                                    //设置右边浮标icon
            float_x = screen_widht - mFloatLayout.getWidth();
        }else{
            floatImage.setImageDrawable(mContext.getDrawable(R.drawable.xy_icon));
            float_x = 0;
        }
        mParams.x = float_x;
        if(isMove){
            return;
        }
        mMansger.updateViewLayout(mFloatLayout, mParams);
    }
};

使用方法

  1. clone工程至本地
  2. import as moudle
  3. 调用FloatUtil类即可使用
FloatUtil.getInstance().createFloatView(this);
FloatUtil.getInstance().removeFloatView();

github项目链接:

["Click here点击这里"](https://github.com/JackZhous/FloatView

相关文章

  • android浮标制作

    浮标项目 浮标特性 触摸浮标移动特性 点击浮标展开特性 3s内无操作,浮标自动掩藏在两侧(由于浮标只用了一张图片,...

  • 浮标

    有人说,浮标永远不知脚下的深浅。不见涯涘的汪洋也好,帆行一方的河道也罢;猛浪若奔的暴雨季,或是仅可浮瓯的干旱季:只...

  • 钓鱼

    深夜,在夜钓灯的微光中,他静静地看着水面上的浮标。 突然,浮标轻轻跳动。他的睡意一下子没了,紧紧的盯着浮标。 浮标...

  • iOS布莱恩军刀-浮标

    布莱恩军刀的浮标功能,可自定义浮标UI,你需要做的也只是加图片,其他逻辑都已经为你做好:浮标Demo

  • 银色浮标

    【壹】 我看见定春的人影在不远处晃了一下,又不见了。他身边还有多多,或者还有冀。我不确定。人很多。这是一个周五的晚...

  • 静水浮标

    矫马叫,尘土嚣,漫情悠悠谁能撬。 揽文瞧,薄日耀,静水浮标泛轻谣。 饵渐少,浮仍漂,懒鱼浅游浮望笑。 托思照,饮青...

  • Android .9图制作

    Android .9图制作 简单介绍下使用Android studio开发工具制作 .9图过程 1.在Androi...

  • Android-->RecyclerView分组悬浮标题(

    客官先看图:https://github.com/angcyo/ContactsPicker/blob/maste...

  • 强大的Linux

    android开发是指android平台上应用的制作,Android早期由“Android之父”之称的Andy R...

  • 要安卓开发了

    android开发是指android平台上应用的制作,Android早期由“Android之父”之称的Andy R...

网友评论

      本文标题:android浮标制作

      本文链接:https://www.haomeiwen.com/subject/fxjgzttx.html