安卓漫漫路之可移动的按钮.

2021电子科技大学分布式系统期末考点精析与实战解析 本文深入解析2021年电子科技大学分布式系统期末考试核心考点,包括分布式事务、时钟同步、GFS架构等高频内容。基于回忆版试题,提供实战解析与应试技巧,帮助考生高效复习。重点涵盖两阶段提交、Cristian算法等关键技术,适合计算机专业学生备考参考。 阅读详情

项目中需要一个刷新的按钮,不愿意再去循规守矩,想了想决定要弄一个可以移动的按钮来替代之前的固定按钮:

首先的问题就是怎么让控件可以移动呢?

移动的话肯定就是咱们给按钮Button进行setOnTouchListener()监听器,来控制他的落下,移动,抬起事件:

事件一:   落下 ACTION-DOWN

例:获取当前的像素点的X值Y值;

事件二:移动 ACTION-MOVE

例:获取咱们拖动按钮带来的位移量,动态增加记录当前新的位置,对按钮进行重绘,并且在位移时还要有控制逻辑不让按钮被我们移动出屏幕,详情请看代码.

事件三:抬起 ACTION-UP

例:抬起时这里得有判断,因为平常的按钮,也会有抬起事件,可能用词不太恰当,但是意思是正确的,所以这边得有判断逻辑验证此抬起事件是位移之后的抬起事件还是默认的抬起事件;

直接撸代码给大家得了,程序员还是用代码说话:


首先看布局文件:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.demo_keyidong_button.MainActivity">


    <Button
        android:id="@+id/movebtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello_world" />
</RelativeLayout>




 其次看界面代码:

package com.example.administrator.demo_keyidong_button;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private Button movebtn;//可拖动按钮
    private boolean clickormove = true; //点击或拖动,点击为true,拖动为false
    private int downX, downY;   //按下时的X,Y坐标
    private boolean hasMeasured = false; //ViewTree是否已被测量过,是为true,否为false
    private View content; //界面的ViewTree
    private int screenWidth,screenHeight; //ViewTree的宽和高

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        content = getWindow().findViewById(Window.ID_ANDROID_CONTENT);//获取界面的ViewTree根节点View

        DisplayMetrics dm = getResources().getDisplayMetrics();//获取显示屏属性
        screenWidth = dm.widthPixels;
        screenHeight = dm.heightPixels;

        ViewTreeObserver vto = content.getViewTreeObserver();//获取ViewTree的监听器
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

            @Override
            public boolean onPreDraw() {

// TODO Auto-generated method stub
                if(!hasMeasured)
                {

                    screenHeight = content.getMeasuredHeight();//获取ViewTree的高度
                    hasMeasured = true;//设置为true,使其不再被测量。

                }
                return true;//如果返回false,界面将为空。

            }

        });
        movebtn = (Button) findViewById(R.id.movebtn);
        movebtn.setOnTouchListener(new View.OnTouchListener() {//设置按钮被触摸的时间

            int lastX, lastY; // 记录移动的最后的位置

            @Override
            public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub
                int ea = event.getAction();//获取事件类型
                switch (ea) {
                    case MotionEvent.ACTION_DOWN: // 按下事件

                        lastX = (int) event.getRawX();
                        lastY = (int) event.getRawY();
                        downX = lastX;
                        downY = lastY;
                        break;

                    case MotionEvent.ACTION_MOVE: // 拖动事件

// 移动中动态设置位置
                        int dx = (int) event.getRawX() - lastX;//位移量X
                        int dy = (int) event.getRawY() - lastY;//位移量Y
                        int left = v.getLeft() + dx;
                        int top = v.getTop() + dy;
                        int right = v.getRight() + dx;
                        int bottom = v.getBottom() + dy;

//++限定按钮被拖动的范围
                        if (left < 0) {

                            left = 0;
                            right = left + v.getWidth();

                        }
                        if (right > screenWidth) {

                            right = screenWidth;
                            left = right - v.getWidth();

                        }
                        if (top < 0) {

                            top = 0;
                            bottom = top + v.getHeight();

                        }
                        if (bottom > screenHeight) {

                            bottom = screenHeight;
                            top = bottom - v.getHeight();

                        }

//--限定按钮被拖动的范围

                        v.layout(left, top, right, bottom);//按钮重画


// 记录当前的位置
                        lastX = (int) event.getRawX();
                        lastY = (int) event.getRawY();
                        break;

                    case MotionEvent.ACTION_UP: // 弹起事件

                        //判断是单击事件或是拖动事件,位移量大于5则断定为拖动事件

                            if (Math.abs((int) (event.getRawX() - downX)) > 5
                                || Math.abs((int) (event.getRawY() - downY)) > 5)

                            clickormove = false;

                        else

                            clickormove = true;

                        break;

                }
                return false;

            }

        });
        movebtn.setOnClickListener(new View.OnClickListener() {//设置按钮被点击的监听器

            @Override
            public void onClick(View arg0) {
// TODO Auto-generated method stub
                if (clickormove)

                    Toast.makeText(MainActivity.this, "hello,您触发了默认的点击抬起事件",
                            Toast.LENGTH_SHORT).show();

            }

        });

    }
}


这个效果虽然简陋,但是大家的智慧是无限的,后续的扩展优化还是靠大家自己去实现.


项目直达下载通道为:简单的可以移动的Button




如有问题请多指正,您的指正使我更我正确的前行.




西门子1500T系列凸轮同步(CAMIN指令用法) 添加凸轮工艺对象(TO_CAM),也就是凸轮表。开始编程,先写2个轴的使能、回原点与主轴的定位。监控主轴与从轴的位置、速度关系是否满足实验要求。1.添加工艺对象(1个定位轴,1个同步轴)调用CAMIN指令 ,凸轮耦合。主轴为旋转轴且为模数轴。3.调用插补凸轮盘指令。4.仿真、监控、调试。 阅读详情

相关推荐

Spyglass实战指南:跨时钟域同步方案深度解析

本文深度解析了Spyglass在跨时钟域同步方案验证中的实战应用。通过真实案例阐述了亚稳态的危害,并详细介绍了从基础的两级同步器到复杂的异步FIFO与握手协议等八大同步方案,以及如何利用Spyglass进行有效配置、检查与问题排查,为提升芯片设计可靠性提供系统性的避坑指南。

weixin_29219189的博客 837

“DeepNight-in-kotlin“一个纯看妹纸的Kotlin开源项目

转载请标明出处:http://blog.csdn.net/donkor_/article/details/78825038 DeepNight-in-kotlin 陪你度过每一个深夜,妹纸看不停 看够了代码家的妹纸,来看看豆瓣的妹纸。 Github地址: https://github.com/ChenYXin/DeepNight-in-kotlin Description 妹纸图片来...

Sahara_Savage 2万+

利用正射影像对斜射图像进行反向投影

因此,RANSAC算法可以通过计算inliners和outliers的数量来评估估计关键点的质量,确保与其他点不一致的点不会在Homography矩阵中被估计。然后,它通过考虑关键点周围区域中图像的梯度大小和方向来计算每个提取的关键点的方向。由于单应性矩阵的计算可能会受到两个图像中异常值的存在的影响,这将导致矩阵的不正确估计并导致沿图像的对准和映射不良。FLANN匹配器的方法基于K近邻搜索的概念,即从图像中找到k个近邻。找到相机在正射影像坐标系中的位置并在正射影像上绘制重叠区域的边界框。

gis收藏家的博客 1511

动态规划全解析

本人学习算法的时候,一直对动态规划报有一种恐惧的心理,直到学习了下面链接的dp全解析,才慢慢撸起动态规划的题目: http://www.cnblogs.com/sdjl/articles/1274312.html 对于一道题目能否用dp,关键考虑以下几点: 1、构造问题所对应的过程。 2、思考过程的最后一个步骤,看看有哪些选择情况。        3、找到最后一步的子问题,确保符

webnoob 1万+

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1004

从SD更新字库到FLASH,再用LCD显示

用Flash当字库存储载体。思路是先将要用到的字库文件存在SD卡,然后存储到Flash,LCD显示时候从Flash中读取 还挺顺利的,移植的原子的程序,自己稍加修改,主要是我的液晶屏函数,Flash读写函数,还有存储文件的flash地址不一样。一晚上搞定,大小字体都OK。挺高兴哈哈。这几天忙工作事情有点耽搁了学习进展嘿嘿 在text.c的showstr函数中char的字体颜色随意设置的,可以显...

weixin_30505751的博客 914

【破解软件】知音漫客免费看更多漫画

历史文章推荐: 1、漫客栈破解版 2、漫画岛破解版 3、漫画台破解版 4、二次元漫画破解版 【软件名称】: 知音漫客(免费版) 【软件版本】: v_4.9.5 【软件大小】: 23.25MB 【支持系统】: 安卓系统 【亲测演示】: 软件无需登录 包含更多漫画 分类超多超详细 最新漫画更新及时 会员漫画显示被锁不用担心 点击观看直接解锁 包含丰富的媒体合作 所以漫画很齐全 希望大...

moyanxiaoq的博客 5万+

【斯坦福计网CS144项目】环境配置 & Lab0: ByteStream

前言 感觉学了不少 C++ 编程的知识和技术但比较缺少实践,于是打算找一些项目跟着做一做。 首先安利一个自学网站 CS自学指南,北大的同学做的,汇总了很多国内外高校 CS 相关的高质量公开课,其中大部分是有课程项目的。翻了翻感觉 Stanford 的这门 CS144 计网课的 Lab 比较有趣,难度也不错,就是它了! 课程网址:CS 144: Introduction to Computer Networking 我跟的是 2021 Fall 学期的版本。 准备工作 在上面的网站中先把 8 个实验的文档(

アルタイル 8163

转移到ios下载安卓_转移到ios下载-转移到ios app下载v2.10.0 安卓最新版-2265安卓网...

转移到ios app是一款非常好用的手机换机app,用户可以通过该软件把安卓手机的文档和数据完美的转移到ios中,不用担心换手机后数据丢失,并且该软件操作简单,有需要的可以到2265安卓网下载体验!转移到ios介绍Move to iOS 是苹果公司为安卓客户开发的一个软件,本来是 iOS 9 系统中的一个新功能,苹果在今年的 WWDC 大会上向世人介绍了这款应用。当安卓老用户转向使用 iPhone...

weixin_42336364的博客 2万+

YOLOv11改进 - C3k2融合 | C3k2 融合 ARConv 自适应矩形卷积:动态调整卷积核形状与采样点

本文介绍了将自适应矩形卷积(ARConv)模块与YOLOv11相结合的方法。ARConv是针对遥感图像全色锐化任务设计的创新卷积模块,可自适应调整卷积核形状与采样点数量,解决传统卷积刚性限制,实现高效特征提取。其工作流程包括学习卷积核高度和宽度、选择采样点数量、生成采样图、卷积实现与空间自适应增强。我们将集成ARConv的C3k2_ARConv模块引入YOLOv11,对相关代码进行修改和注册,并配置了yolov11 - C3k2_ARConv.yaml文件。实验脚本显示,该结合方式应用于目标检测任务。

魔改工程师的博客 1005

使用CiteSpace软件对知网文献进行关键词共现/聚类/突现分析

一、基本概念CiteSpace(引文空间)是一款专注于分析科学分析中蕴含的潜在知识的软件。它是在科学计量学、数据可视化背景下逐渐发展起来的引文可视化分析软件。通过可视化的手段,CiteSpace能够呈现科学知识的结构、规律和分布情况,并因此将这种分析得到的可视化图形称为“科学知识图谱”。二、主要功能和用途知识图谱构建:根据科学文献的引用关系,CiteSpace可以生成知识图谱,帮助研究人员更好地理解学术领域中不同文献之间的联系和演化过程。主题聚类分析。

m0_64336780的博客 1万+

漫画大全更新了。。。。。

无会员,10万+本漫画,统统免费!!! 最新最热门的免费漫画大全,最全最二次元的撸漫平台,超多正版高清彩漫尽在漫画大全APP! 《斗罗大陆》《斗破苍穹》《凤逆天下》《妃夕妍雪》《穿越西元3000后》《纯情丫头火辣辣》《勇者是女孩》《龙族》《哑舍》《暴走邻家》等等,全部免费,喜欢的统统都到碗里来!!! 欢迎下载使用   ...

Fly的学习博客 4万+

【WRF模拟】保存wrf输出文件到指定目录+仅输出指定空间域/变量文件

修改wrf命令以更改指定输出文件目录等

WW、forever的博客 543

www.hackhome.com

 www.hackhome.com

zgyjava的专栏 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

心情不好时就来看看这篇文章吧...(转)

* 学会 沉默 有时候,你被人误解,你不想争辩,所以选择沈默。本来就不是所有的人都得了解你,因此你认为不必对全世界喊话。却也有时候,你被最爱的人误解,你难过到不想争辩,也只有选择沈默。全世界都可以不懂你,但他应该懂,若他竟然不能懂,还有什么话可说?生命中往往有连舒伯特都无言以对的时刻,毕竟不是所有的是非都能条列清楚,甚至可能根本没有真正的是与非。那么,不想说话,就不说吧,在多说无...

weixin_30497527的博客 869

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

福利应用更新,这几款都是老司机喜欢的

iOS应用更新微X纯净更新到7.0.17漫漫lu。ltu短视频。点击下方获取下载地址获取地址后,我们去safari浏览器粘贴访问就行了! ...

qq_34718767的博客 3万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

打飞机小游戏破解版

打飞机小游戏破解版 #include&amp;lt;iostream&amp;gt; #include&amp;lt;windows.h&amp;gt; #include&amp;lt;conio.h&amp;gt; #include&amp;lt;time.h&amp;gt; #include&amp;lt;string&amp;gt; using namespace std; /*=============

Zhao_Chongyan的博客 4560

python 破解js加密cookie,突破521错误-还没有成功,后面有时间再看

参考1:爬虫遭遇状态码521陷阱 破解js加密cookie,参考代码:xiantang/Spider/tree/master/Anti_Anti_Spider_521 参考2:域名信息521js破解 工具1:代码格式化工具 | | | 我是找IP代理时遇到的,http://www.66ip.cn/areaindex_1/1.html, 后面慢慢发现,有很多相关项: 浏览器; IP; 时间; O...

hugh_博客标题 4563

喜欢动漫的小伙伴看过来

现在有好几款动漫app分享给你,每一款都设计极简,风格小清新,颜值高,实用好用。分享一:M漫这是一款高质量的漫画软件;极简美观,简洁干净,使用流畅,加载速度极快,实际体验极佳;支持多个优质源,支持各种强大的搜索功能和分类功能,支持下载功能,支持丰富的设置选项。软件支持安卓版本。分享二:樱桃漫画这是一款极简漫画软件;它的主要特点是支持小说和漫画两种功能,一个软件相当于多个软件;支持强大的分类功能和搜索功能,可以帮你找到很多优质的小说和漫画,软件支持安卓版本。分享三:Cimoc这是一款宝漫画软件;风格简洁,支持

duhunst71的博客 2万+

java 大顶堆的构建和排序

基本原理就不说了,代码慢慢撸!!!!!!!import java.util.Arrays; public class HeapSort { public static void main(String[] args) { //int [] array ={1,2,5,6,3,4,7,8,9,12,11,0}; int [] array = {2,3,4,5,6,7}; he...

qi_Baby的博客 8458

request+BeautifulSoup:下载《笔趣看》网小说《第九特区》

# -*- coding:UTF-8 -*- from bs4 import BeautifulSoup import requests, sys import time """ 类说明:下载《笔趣看》网小说《第九特区》 Parameters: 无 Returns: 无 Modify: 2020-10-16 """ class downloader(object): def __init__(self): #self.server = 'http://ww.

bensam的博客 2420

快速开发趣事:我与小白妹纸的漫漫撸码路

快速开发趣事:我与小白妹纸的漫漫撸码路 最近,活儿又来了,真是屋漏偏逢连阴雨,经过半年的洗礼能用得上的开发就我一个人了,怎么办呢,唉呀妈呀,脑壳疼脑壳疼… 这不,老总又要找我开会了。 “小王啊,最近公司要上一个新项目,但是公司能提供的资源有限,不知道你对这个项目有什么想法?” 我:“这个项目工作量有点大,我可能需要有人协助,...

力软敏捷开发框架 10万+

apk如何进行反编译/关于android

2020年2月3日晚 我想反编译一个apk用来学习,结果发现,网上的文章可真nice,费了九牛之力,终于成功。(网上好多文章都是盗的,根本不讲清楚,在那胡说,对此本人竖起大大的拇指),具体过程如下。 1、下载工具 链接:https://pan.baidu.com/s/1e_WVJRuKGBaz7-n6T-lcgQ 提取码:enqz 不赚你们积分,网盘自取,tools文件里面包含三个文件 说明:(...

qq_45890619的博客 8808

adobe reader XI打开大约十几秒就闪退问题解决方法大全

dobe reader XI打开大约十几秒就自动退出怎么解决? 转自:https://www.fengjunzi.com/blog-55539.html 方法一、更新补丁 注意:先请安装11.0.00正式版,再打11.0.23更新补丁包。因为官方并没有提供11.0.23的简体中文版完整安装包,所以必须这样升级! 下载地址: Adobe Reader XI 11.0.00 简体中文版http://ardownload.adobe.com/pub/adobe/reader/win/11.x/11.0.00

凝望星空 3万+

快速开发:我和实习妹纸的撸码故事(2)

就要过年了,也不知道各位同行过得开不开心呢!反正六六我是开心的!为什么呢?自从杨小花来了以后,我第一次感觉上班也是一件很美妙的事情~~~那种被妹纸崇拜的感觉真的是相当美好啊~~~而且这也不是全部,最开心的是,领导给我升职加薪了。以后我在部门也不只是一个简单的开发人员了,我也是一个组长了,兼职带带实习生。 闲话不多说了,下面来给大家说一下,最近这段时间我和小花的撸码日常。大家都知道小花是刚来我们公

endless0709的博客 2042

iOS 的奇淫技巧

http://www.jianshu.com/p/50b63a221f09

努力~ 1744
上一篇: 安卓漫漫路之读取本地html文件.
下一篇: 安卓漫漫路之碎片Fragment不同包下的区别.
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值