安卓 悬浮按钮图片

Android悬浮按钮设计与实现:从基础到动画效果 浮动按钮通常是一个圆形图标按钮,用于展示或执行应用中的主要操作。它被设计为悬浮在UI之上,以引起用户的注意,并鼓励用户执行特定的操作,如创建新的内容或显示一个操作菜单。为了实现悬浮按钮的拖动,我们首先需要创建一个自定义的Behavior类,这个类将会被识别并用于处理拖动事件。super();@Override// 代码逻辑,处理触摸事件@Override// 代码逻辑,处理拖动事件旋转动画是用户与界面交互的一个重要反馈,可以增加应用的交互性和视觉吸引力。 阅读详情

悬浮可拖动图片按钮

最近在写悬浮的按钮,而且可以拖动,查了一下, 整理了自己的方法,ok 直接开始吧;
第一步新建一个自定义的线性布局:

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.xlky.xlxt.core.util.DensityUtils;
import com.xlky.xlxt.tools.LogUtils;

/**
 * 悬浮按钮布局 2023.7.25
 */
public class DragLinearLayout extends LinearLayout {


    /*
    private boolean
            onlyX,//仅X轴可移动
            onlyY;//仅Y轴可移动*/
    private int
            lastX,lastY,//记录上一次的x,y坐标
            mLeft,mTop,mRight,mBottom,//记录当前元素的的上下左右(相对于父元素)
            startX,startY,//记录初始x,y坐标
            endX,endY;//移动结束x,y坐标,用于计算是否点击事件

    //用于点击事件触发
    public interface OnClickListener
    {
        void onClick(View view);
    }

    OnClickListener clickListener = null;

    public DragLinearLayout(Context context) {
        super(context);
    }

    public void setOnClickListener(OnClickListener listener)
    {
        clickListener = listener;
    }

    public DragLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

        /*
        //获取属性值
        TypedArray type = context.obtainStyledAttributes(attrs, R.styleable.DragLinearLayout);
        onlyX = type.getBoolean(R.styleable.DragLinearLayout_onlyX,false);
        onlyY = type.getBoolean(R.styleable.DragLinearLayout_onlyY,false);
        type.recycle();*/
    }

    public DragLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouchEvent(MotionEvent event) {

        int action = event.getAction();
        int rawX = (int)event.getRawX();
        int rawY = (int)event.getRawY();

        switch (action)
        {
            case MotionEvent.ACTION_DOWN://按下记录初始坐标
                startX = lastX = rawX;
                startY = lastY = rawY;
                break;
            case MotionEvent.ACTION_MOVE:

                //计算偏移量
                int dx = rawX - lastX;
                int dy = rawY - lastY;

                /*
                //限制只能x轴方向拖动
                if (onlyX)
                {
                    dy = 0;
                //限制只能y轴方向拖动
                }else if (onlyY)
                {
                    dx = 0;
                }*/

                //计算控件坐标距离父控件原点各方向距离
                mLeft = getLeft() + dx;
                mRight = getRight() + dx;
                mTop = getTop() + dy;
                mBottom = getBottom() + dy;
                Log.d("mawl","移动监听=="+mLeft+"  "+mTop+"  "+mRight+"  "+mBottom);

//                移动监听==631  1899  931  2199   为了限制在一定范围内拖动
                if(mLeft>35&&mTop>140&&mRight<DensityUtils.getScreenWidth()-50&&mBottom<DensityUtils.getScreenHeight()-200){
                    layout(mLeft,mTop,mRight,mBottom);
                }


                //拖动时背景半透明
                //setBackground(getResources().getDrawable(R.drawable.draglinearlayout_press));

                lastX = rawX;
                lastY = rawY;

                break;
            case MotionEvent.ACTION_UP:

                LogUtils.d("屏幕宽高是=="+DensityUtils.getScreenWidth()+"  "+DensityUtils.getScreenHeight());

                endX = rawX;
                endY = rawY;

                //拖动完毕背景恢复
                //setBackground(getResources().getDrawable(R.drawable.draglinearlayout_up));

                //点击事件
                if (Math.abs(endX - startX) < 3 || Math.abs(endY - startY) < 3) {
                    this.performClick();
//                    clickListener.onClick(this);
                }

                if(mLeft==0&&mTop==0&&mRight==0&&mBottom==0){
					//该判断是为了防止点击跳转界面时候 获取到的四个位置尺寸为0,界面又绘制到0的位置
                }else {
                    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)getLayoutParams();
                    params.setMargins(mLeft,mTop,0,0);

                    //这里指定下宽高,否则如果布局文件指定了match_parent/wrap_content,会导致自动伸缩宽高
                    params.width = getMeasuredWidth();
                    params.height = getMeasuredHeight();
                    setLayoutParams(params);

                }

                break;
        }

        return true;
    }

}

第二步 在布局中的配置:


```java
  <com.xlky.xlxt.tools.widget.DragLinearLayout
            android:id="@+id/float_view"
            android:layout_width="@dimen/dp_66"
            android:visibility="gone"
            android:layout_height="@dimen/dp_66"
            android:orientation="vertical"
            >
            <ImageView
                android:id="@+id/iv_home_float_ad"
                android:layout_width="@dimen/dp_66"
                android:layout_height="@dimen/dp_66"
                android:src="@mipmap/ic_launcher"
                ></ImageView>
        </com.xlky.xlxt.tools.widget.DragLinearLayout>
别忘了 最外部布局是 相对布局的,ok 继续最后一步,在代码中的使用:


@BindView(R.id.float_view)
    DragLinearLayout float_view;//首页悬浮按钮
    @BindView(R.id.iv_home_float_ad)
    ImageView iv_home_float_ad;//首页悬浮按钮
    
   // 。。。。。。略去其他的不用代码

         //初始化 悬浮按钮 位置
        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)float_view.getLayoutParams();
//        params.setMargins(DensityUtils.getScreenWidth()-100-iv_home_float_ad.getWidth(),DensityUtils.getScreenHeight()-300-iv_home_float_ad.getHeight(), DensityUtils.getScreenWidth()-100,DensityUtils.getScreenHeight()-300);
        params.setMargins(1122 , 2401 , 1375 , 2654);//设置在当前布局的某个位置,比如右下角,具体根据自己手机分辨率来填写
        float_view.setLayoutParams(params);

    //。。。。。。略去其他的不用代码
     float_view.setVisibility(View.VISIBLE);
            ossAdFloatBean = ossAdEntity.getData().get(0);
            GlideManager.loadImg(HttpConstants.XLXT_IMG + ossAdFloatBean.getImgUrl(), iv_home_float_ad, R.drawable.img_all_bg);  //给图片配置图片信息

		//点击方法
      

  float_view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!TextUtils.isEmpty(ossAdFloatBean.getADUrl())) {
                    //点击首页悬浮按钮
                    if (!LoginManager.getInstance().isLogin()) {
                        LogUtils.d("点击悬浮按钮 去登录=="+ossAdFloatBean);
                        Intent intent=new Intent(mActivity,LoginPasswordActivity.class);
                        intent.putExtra(XlxtConstant.HOME_OSS_MASSAGE, ossAdFloatBean);
                        startActivity(intent);
                    }else {

                        HomeRoutManager.getInstance().ossH5OrNativeRout(mActivity, ossAdFloatBean);
                    }
                }
            }
        });


ok  就简单的这么写吧,可以试试
仿蘑菇街风格的Android UI设计实战教程 Android UI的设计基于XML布局文件,它定义了界面的结构和外观。一个典型的布局文件包含一个根元素和多个子元素,这些子元素可以是各种视图组件,如TextView、Button、ImageView等。每个视图组件都有它自己的属性,用于定义尺寸、位置、背景、文字等特性。<TextView<Button在XML布局文件中,开发者可以定义多种视图组件,每个组件都有其特定的用途:TextView: 显示文本信息。Button: 用户点击的按钮。ImageView。 阅读详情

相关推荐

Android实现悬浮可拖拽的Button

主要为大家详细介绍了Android实现悬浮可拖拽的Button,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Android 自定义可拖动悬浮按钮

4. 在 Activity 中添加该 View,并设置其 LayoutParams,使其可以悬浮在屏幕上。2. 在 View 中实现 onTouchEvent 方法,处理触摸事件,实现拖动功能。1. 创建一个自定义的 View,继承自 View 或者 ImageButton。3. 在 View 中实现 onDraw 方法,绘制悬浮按钮的样式。5. 在 View 中添加点击事件,实现点击悬浮按钮后的操作。6. 可以添加动画效果,使悬浮按钮更加生动。// 点击悬浮按钮后的操作。// 绘制悬浮按钮的样式。

YDHIT的博客 2603

Python RPA 流程自动化快速上手

Python RPA 流程自动化快速上手

看花容易绣花难 1万+

Android - 可拖动按钮悬浮button

一、可以拖动的View全局拖动,直接贴代码。

m0_59482482的博客 1193

企业信息化系统的组成模块-核心业务系统

通过标准化的数据流形成完整的业务闭环,CRM生成的销售订单驱动ERP的生产和采购,ERP将生产计划传递给MES执行,MES报工数据返回ERP进行成本核算,ERP再将交付信息同步给CRM供客户查询。生产管理确保高效交付,缩短订单周期。某贸易公司实施ERP供应链模块后,库存周转率从每年4次提升到8次,库存资金占用从2000万降到1200万,释放800万现金流,同时缺货率从15%降到5%。│ │库存 │ │ MRP │ │ ERP │ │ 云ERP/ │ │。

weiyvyy的博客 694

GD32F303定时器配置:实现两路互补PWM输出与相位控制

本文详细解析了基于GD32F303定时器实现两路互补PWM输出与精确相位控制的方法。通过配置TIMER2的中间对齐模式,结合REMAP功能解决引脚复用问题,从硬件层面稳定生成相位差180度的互补PWM信号,适用于电机驱动、开关电源等对时序要求苛刻的应用场景。

weixin_29182481的博客 304

Android界面设计:Material Design之悬浮按钮和可交互提示

在官方给出的示例中,最简单且最具代表性的立面设计就是悬浮按钮了,这种按钮不属于主界面平面的一部分,而是位于另外一个维度的,因此就会给人一种悬浮的感觉。打个比方,如果在执行删除操作的时候只弹出一个Toast提示,那么用户要是误删了某个重要数据的话,肯定会十分抓狂吧,但是如果增加一个Undo按钮,就相当于给用户提供了一种弥补措施,从而大大降低了事故发生的概率,提升了用户体验。可以看到,Snackbar从屏幕底部出现了,上面有我们设置的提示文字,还有一个“Undo”按钮,按钮是可以点击的。

jemo的博客 759

告别深度学习!用5个麦克风搞定多说话人分离:ReTM算法保姆级教程

本文详细介绍了ReTM算法,这是一种无需深度学习、仅需5个麦克风即可实现多说话人语音分离的创新信号处理方法。它通过估计相对传递矩阵,利用空间物理信息在混响环境中分离语音,具有数据需求低、计算复杂度小、无需先验几何信息等优势,特别适合嵌入式设备和资源受限场景。

desk3的博客 157

Android8.0 悬浮窗的实现

0. 前言   现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示。这个功能在很多情况下都非常有用。那么今天我们就来实现一下Android悬浮窗,以及探索一下实现悬浮窗时的易错点。首先可以看看个悬浮窗效果图,很抱歉gif动态超过5M无法上传 好啦,下面就来一曲火星哥骚气的《Treasure》吧。 Demo源码地址:https://github...

P876643136的博客 3447

从理论到实践:Zemax驱动下的离轴三反光学系统全流程构建

本文详细阐述了从理论推导到软件实现的离轴三反光学系统全流程设计方法。文章首先分析了离轴三反系统在空间遥感等领域的优势,然后手把手指导如何基于像差理论计算共轴三反的初始结构参数,包括曲率半径与圆锥系数。最后,重点介绍了在Zemax中完成从共轴建模、视场离轴设置到优化与性能评估的完整实战步骤,为光学工程师提供了宝贵的经验与避坑指南。

weixin_29205061的博客 238

【ROS】Nav2源码之nav2_collision_monitor(碰撞监测)详解

nav2_collision_monitor碰撞监视器是一个节点,为机器人提供了一个额外的安全级别。它使用来自传感器的数据,执行若干与避免碰撞相关的任务,绕过成本图和轨迹规划器,监测是否需要紧急停止或者减速。

郭老二 1455

Android 可拖动、点击按钮

Android 可拖动、点击按钮

Ben_Fade的博客 1673

AI编程工具到底是初学者的绊脚石还是垫脚石?

现在是AI时代,我们要做的,是学会拥抱AI、使用AI,成为AI的驾驭者,如果你因为害怕使用AI学不到东西,那么大可不必,因为AI必然是今后的趋势,相信会用AI在今后的求职面试中也会有很大的占比。另外我之前写了多篇有关AI编程开发工具Trae的使用技巧和教程,需要的话你可以关注公众号后通过菜单栏获取。另外我也把所有Trae相关的文章整合到了腾讯ima知识库,感兴趣的可以关注公众号以后回复。

cpp加油站的专栏 184

Floating Action Button(悬浮按钮)的常用属性 以及图片不居中的解决方案

backgroundTint : 这个属性用于设置悬浮按钮的底色,一般悬浮按钮的底色由 Theme的colorSecondary决定。设置backgroundTint也可以改变按钮的底色。fabSize : 这个用于设置悬浮按钮的大小,有三个可选值。rippleColor :设置按钮被点击后的涟漪效果的颜色。elevation : 设置按钮投影下来的阴影大小。maxImageSize :设置指示图标的最大尺寸。customSize :设置自定义的按钮尺寸。,如果你的图片没有居中显示。

Tai_Monster的博客 1908

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

悬浮按钮和可交互提示的使用

(1)效果展示 (2)实现过程 1.引入material库,并sync //material库 implementation 'com.google.android.material:material:1.0.0' 2.准备好一张打钩的图 显示时的图片是这样的 3.修改activity_main.xml <?xml version="1.0" encoding="utf-8"?> <androidx.drawerlayout.widget.DrawerLayout xm

一粒程序米 325

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android用悬浮按钮实现翻页效果

先看效果:   MainActivity.java package com.cn.nj.pageflipper; import android.app.Activity; import android.graphics.PixelFormat; import android.os.Bundle; import android.os.Handler; import and

niejing654092427的专栏 1123

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

GitHub中Android开源项目及库汇总

GitHub中Android开源项目及库汇总 ,GitHub库整理,Android学习整理,

学习是修养的提升 9216

ViewPager图片旋转

package com.wiiy.jtb.manager; import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.MalformedURLE...

weixin_30455661的博客 275

android 全局悬浮按钮,Android自定义APP全局悬浮按钮

原本想通过framelayout实现一个悬浮在其他控件上的按钮,但是觉得很麻烦,需要各个界面都要动态填充.于是想到了悬浮窗,就自定一个ImageView用于显示全局按钮.一、首先因为悬浮窗式的所以要添加权限,对于SDK>=23的需要动态获取权限,我这边用的是22的二、通过application获取到全局性的WindowManager的params数据private WindowManager...

weixin_29594291的博客 1002

Android 开发:在屏幕上显示 图片 (恶搞小程序)

该示例展示了一个 Android 服务,用于在屏幕上显示一个悬浮窗(浮动窗口)。悬浮窗是在其他应用之上显示的 UI 组件,可以用于各种场景,如悬浮按钮、通知窗口等。本文介绍了如何在 Android 应用中实现一个悬浮窗服务。悬浮窗服务是一种可以在其他应用程序上显示自定义 UI 组件的技术,常用于创建悬浮按钮、通知窗口等功能。服务类声明和导入必要包:导入所需的类和接口,声明服务类。变量声明和 onBind 方法:声明所需的变量并定义onBind方法。初始化悬浮窗和设置窗口参数:获取。

m0_74972192的博客 723

android开发种常用的

1.把资源里的图片转为Bitmap文件: Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.flower4,ull); 2.传值可以用EventBus,超级好用! 3.使用camera的说话,可以在 mCamera.setPreviewCallback这个回调中获取视频流中的每一帧图片,可以在onFaceDetection(Camera.Face[] faces, Camera camera)中判断是否有人脸,当

hybb252190352的博客 686

20191029 - MaterialDesign (三)滑动菜单

滑动菜单 在DrawerLayout中的textView替换成NavigationView,在其中使用app:menu和app:header,同时在menu和layout目录下添加resource文件,指定menu和header的布局。 悬浮按钮、可交互提示 悬浮按钮:一个按钮,使用和button没什么区别,可交互提示的使用和Toast也区别不大,而且感觉用的地方应该不多,因为没太见过,所以...

late13的博客 153

转载GitHub中Android开源项目及库汇总

转自:https://blog.youkuaiyun.com/u013472738/article/details/78153077 几个常用网站: github排名: https://github.com/trending , github搜索: https://github.com/search codeKK&...

qq_35841348的博客 2083

android 标题名字,说说 Android 的 Material Design 设计(五)——可折叠式标题栏

1 CollapsingToolbarLayout 布局CollapsingToolbarLayout 是基于 Toolbar 的布局。它可以让 Toolbar 的效果变得更加华丽。注意:CollapsingToolbarLayout 只能作为 AppBarLayout 的直接子布局。现在我们创建一个空活动来显示猫的详情:然后在 activity_cat.xml 中编写界面布局,主要分为两个部分,...

weixin_39553753的博客 144
上一篇: 安卓intent跳转界面传递大数据处理
下一篇: 安卓设置控件显示一定比例长度截取
mawlAndroid
博客等级 码龄10年 5粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值