记录一次Android侧滑需求代码

news2025/1/10 17:52:41

点击/滑动界面显示,不多说,上代码,性能未知

效果图

点击/滑动前界面     滑动后效果    

 

布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="true"
    android:orientation="vertical"

    tools:openDrawer="start">
    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:textAlignment="center"
        android:gravity="center"
        android:background="@color/colorAccent"
        android:layout_height="40dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textColor="@android:color/white"
            android:text="我是标题" />
    </androidx.appcompat.widget.LinearLayoutCompat>

        <AbsoluteLayout
            android:clipChildren="true"
            android:id="@+id/content_field"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ffffff">
            <androidx.appcompat.widget.LinearLayoutCompat
                android:layout_width="370dp"
                android:background="@android:color/holo_blue_dark"
                android:layout_height="match_parent">
            </androidx.appcompat.widget.LinearLayoutCompat>
              <androidx.appcompat.widget.LinearLayoutCompat
                  android:layout_width="match_parent"
                  android:gravity="center"
                  android:id="@+id/right"
                  android:layout_x="370dp"
                  android:orientation="vertical"
                  android:layout_height="match_parent">
                <androidx.appcompat.widget.LinearLayoutCompat
                    android:layout_width="match_parent"
                    android:background="@android:color/white"
                    android:layout_height="40dp">
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:text="标题1"
                        android:gravity="center"
                        android:layout_height="40dp"></TextView>
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:text="标题2"
                        android:gravity="center"
                        android:layout_height="40dp"></TextView>
                    <TextView
                        android:id="@+id/title4"
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:text="标题3"
                        android:gravity="center"
                        android:layout_height="40dp"></TextView>
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_weight="1"
                        android:text="标题4"
                        android:gravity="center"
                        android:layout_height="40dp"></TextView>
                </androidx.appcompat.widget.LinearLayoutCompat>
                  <androidx.appcompat.widget.LinearLayoutCompat
                      android:layout_width="match_parent"
                      android:layout_weight="1"

                      android:layout_height="match_parent">
                      <View
                          android:layout_width="match_parent"
                          android:layout_weight="1"
                          android:background="@android:color/holo_red_dark"
                          android:layout_height="match_parent"></View>
                      <View
                          android:layout_width="match_parent"
                          android:layout_weight="1"
                          android:background="@android:color/holo_orange_dark"
                          android:layout_height="match_parent"></View>
                      <View
                          android:layout_width="match_parent"
                          android:layout_weight="1"
                          android:background="@android:color/holo_green_light"
                          android:layout_height="match_parent"></View>
                      <View
                          android:layout_width="match_parent"
                          android:layout_weight="1"
                          android:background="@android:color/holo_blue_dark"
                          android:layout_height="match_parent"></View>
                  </androidx.appcompat.widget.LinearLayoutCompat>
              </androidx.appcompat.widget.LinearLayoutCompat>
        </AbsoluteLayout>

</androidx.appcompat.widget.LinearLayoutCompat>

activity

import android.animation.ObjectAnimator;
import android.graphics.Point;
import android.graphics.Rect;
import android.opengl.Visibility;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.navigation.ui.AppBarConfiguration;

public class MainActivity3 extends AppCompatActivity {
    LinearLayoutCompat rightLayout;
    private float startX, startY, endX, endY;
    private ObjectAnimator animatorjin, animatortui;
    private TextView title4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        rightLayout = findViewById(R.id.right);
        title4 = findViewById(R.id.title4);
        animatorjin = ObjectAnimator.ofFloat(rightLayout, "translationX", 0, -830);
        animatortui = ObjectAnimator.ofFloat(rightLayout, "translationX", -830, 0);
        animatorjin.setDuration(200);
        animatortui.setDuration(200);
        Log.e("标题", checkIfVisable() + "");
        rightLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    /**
                     * 点击的开始位置
                     */
                    case MotionEvent.ACTION_DOWN:
                        startX = event.getX();
                        startY = event.getY();
                        Log.e("起始位置:", event.getX() + "," + event.getY());
                        break;
                    /**
                     * 触屏实时位置
                     */
                    case MotionEvent.ACTION_MOVE:
                        //  Log.e("实时位置:", event.getX() + "," + event.getY());
                        break;
                    /**
                     * 离开屏幕的位置
                     */
                    case MotionEvent.ACTION_UP:
                        endX = event.getX();
                        endY = event.getY();
                        Log.e("结束位置:", event.getX() + "," + event.getY() + (startX - endX > 300f));
                        if (checkIfVisable()) {//可见
                            if ((endX - startX > 300f) || (startX == endX && startY == endY))
                                animatortui.start();
                        } else {//不可见
                            if ((startX - endX > 300f) || startX == endX && startY == endY)
                                animatorjin.start();
                        }
                        break;
                    default:
                        break;
                }
                /**
                 *  注意返回值
                 *  true:view继续响应Touch操作;
                 *  false:view不再响应Touch操作,故此处若为false,只能显示起始位置,不能显示实时位置和结束位置
                 */
                return true;
            }
        });
    }

    boolean checkIfVisable() {
        Point p = new Point();
        int screenWidth = p.x;
        int screenHeight = p.y;
        Rect rect = new Rect(0, 0, screenWidth, screenHeight);
        int[] location = new int[2];
        title4.getLocationInWindow(location);
        if (title4.getLocalVisibleRect(rect)) {
            return true;
        } else {
            return false;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Cache】Squid代理服务器应用

文章目录 一、Squid 服务器的概念1. 代理服务器概述CDN 服务器 2. 代理的工作机制3. Squid 服务器的作用4. Squid 代理的类型 二、部署 Squid 服务器1. 安装 Squid 服务1.1 编译安装 Squid1.2 修改 Squid 的配置文件1.3 Squid 的运行控制1.4 创建 Squid 服务脚本1.5 supervisor…

在k8s集群中部署一个应用程序

一、 k8s集群简单介绍 上图描述的是拥有一个Master(主)节点和六个Worker(工作)节点的k8s集群 Master 负责管理集群 负责协调集群中的所有活动&#xff0c;例如调度应用程序&#xff0c;维护应用程序的状态&#xff0c;扩展和更新应用程序。 Worker节点(即图中的Node)是VM(虚…

模拟CSRF攻击

今天给大家表演一个拙劣的CSRF攻击。 我会编写两个应用&#xff1a;一个是正经应用&#xff0c;一个是钓鱼的应用。然后让后者攻击前者&#xff0c;让它打钱&#xff01; 一、绪论 1.1 先聊聊Cookie 参考&#xff1a;常用的本地存储——cookie篇 Cookie在八股文里面好像已…

模板类的开发

模板类的开发 栈定长数组变长数组 栈 入栈和出栈使用引用是为了传递参数 注意构造函数初始化列表使用模板的写法 注意析构函数delete指针需要 [ ] 测试 定长数组 重载了括号运算符 调用的其实是数组 使用int 使用char 变长数组

比亚迪车载Android开发岗三面经历~

前言 首先&#xff0c;我想说一下我为什么会想去比亚迪这样的车企做车载Android开发。我是一名有5年经验的Android开发工程师&#xff0c;之前一直在互联网软件公司工作&#xff0c;做过移动端App和IoT产品的开发。但我一直对汽车领域很感兴趣&#xff0c;也希望自己的技术能应…

TOT(Tree of Thought) | GPT-4+dfs搜索算法提升大模型复杂问题解决能力

大家好&#xff0c;我是HxShine。 今天分享一篇普林斯顿大学的一篇文章&#xff0c;Tree of Thoughts: Deliberate Problem Solving with Large Language Models[1]&#xff1a;思维之树:用大型语言模型解决复杂问题。 这篇工作还是非常有借鉴意义的&#xff0c;OpenAI的Andr…

2023年07月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年07月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

深度学习基础

1 机器学习、深度学习、人工智能 1.1 机器学习 机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身性能的学科。 基本步骤&#xff1a;获取数据、数据预处理、特征提取、特征选择…

postman几种常见的请求方式

1、get请求直接拼URL形式 对于http接口&#xff0c;有get和post两种请求方式&#xff0c;当接口说明中未明确post中入参必须是json串时&#xff0c;均可用url方式请求 参数既可以写到URL中&#xff0c;也可写到参数列表中&#xff0c;都一样&#xff0c;请求时候都是拼URL 2&am…

【win怎么给两个屏幕设置不同壁纸】

在现在经济的发展下&#xff0c;多数用户都拥有了两个屏幕&#xff0c;那么如何在不适用壁纸软件的情况下&#xff0c;将两个屏幕设置成不同的壁纸呢&#xff1f; 操作 首先将需要进行设置的图片选好&#xff0c;将其保存到桌面上&#xff0c;紧接着框选两张图片&#xff0c;…

探索Gradio库中的Image模块及其强大功能

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

84、基于stm32单片机超市自助存储柜快递箱系统设计(程序+原理图+流程图+参考论文+开题报告+任务书+设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

Go程序结构- package和import

1、包和文件 在Go语言中包的作用和其他语言中的库或模块的作用类似&#xff0c;用于支持模块化、封装、编译隔离和重用。关键点如下&#xff1a; (1)包中保存一个或者多个.go结尾的文件&#xff0c;而包的目录就是包的导入路径 (2)中Go中通过一条简单的规则来管理标识符是否对外…

下个版本已定!C++自救新动作!

自去年年底&#xff0c;美国安全局&#xff08;NSA&#xff09;在其所发布的《Software Memory Safety》报告中点名批评C之后&#xff0c;C之父Bjarne Stroustrup一顿回怼后&#xff0c;做出决定&#xff1a;内部自救。现在&#xff0c;就让我们看看下一个版本的C&#xff0c;究…

【Go】Go 语言教程--语言变量(五)

往期教程&#xff1a; Go 语言教程–介绍&#xff08;一&#xff09;Go 语言教程–语言结构&#xff08;二&#xff09;Go 语言教程–语言结构&#xff08;三&#xff09;Go 语言教程–数据类型&#xff08;四&#xff09; 文章目录 变量声明多变量声明值类型和引用类型简短形…

【微服务】springboot 适配多数据源设计与实现

目录 一、问题背景 1.1 mysql读写分离 1.2 适配多种类型数据库 1.3 多数据源 二、适配多数据源场景和问题 2.1 支持快速切换其他数据源 2.2 代码层面最小化改造 2.3 数据迁移问题 2.4 跨库事务问题 三、多数据源适配解决方案 3.1 自己造轮子 3.2 基于providerId方式…

年少轻狂,中年失意,晚年凄惨的杜甫

诗圣杜甫的一生&#xff0c;几乎和苦难、倒霉紧紧拴在了一起。 裘马轻狂&#xff0c;恣意漫游的青年 公元712年&#xff0c;发生了两件值得历史铭记的大事情。第一件事&#xff0c;唐玄宗在这一年继位&#xff1b;第二件事&#xff0c;伟大的诗人杜甫在这一年出生。 杜甫字子…

openstack平台IsolatedHostsFilter的使用记录

文章目录 前言已有的经验思路一&#xff1a;image元数据思路二&#xff1a;flavor元数据思路三、IsolatedHostsFilter&#xff1a;使用filter来限制总结 前言 甲方的云平台新到了一些海光的机器&#xff0c;希望能加入到已有的计算集群里面。问题不大&#xff0c;但是有些小的…

怎么开发zblog插件?

要开发 ZBlog 插件&#xff0c;可以按照以下步骤进行&#xff1a; 1. 创建插件目录&#xff1a;在 ZBlog 的插件目录中创建一个新的目录&#xff0c;目录名称即为插件的名称&#xff0c;例如 "myplugin"。 2. 创建插件入口文件&#xff1a;在插件目录下创建一个 PHP …

Android Studio实现内容丰富的安卓宿舍管理平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号086 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.报…