Padding负值遮挡视图(下拉刷新头部)

padding值负值时,表示当前视图被遮住了一部分

可使用 view**.set Padding(int left , int top , int right , int bottom)**方法进行动态设置。

下拉刷新头部的实现:

(1) 获取屏幕大小。
(2) 设置 刷新头高度(定值)

设置 显示部分高度为/屏幕高度(定值)

设置 整体高度 为刷新头高与屏幕高之和(定值)
(3)整体的 paddlingTop 设为负值时即可遮住刷新头。(为0-刷新头高时遮住全部刷新头)
(4) 整体的paddingTop值进行动态设置:
0-刷新头高**->** 不断增加**->** 0(完全展示)****-> 不断减少**->** 0-刷新头高

java 复制代码
//例
//整体为RelativeLayout(all)
//刷新头为ImageView
//显示部分为RelativeLayout(button)

//获取控件
RelativeLayout relativeLayout_all=findViewById(R.id.relative_all);
RelativeLayout relativeLayout_button=findViewById(R.id.relative_button);
Button button=findViewById(R.id.button);
ImageView imageView=findViewById(R.id.imageView);

//获取宽度高度
WindowManager windowManager= (WindowManager) getSystemService(WINDOW_SERVICE);
DisplayMetrics metrics=new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(metrics);
int screenWidth=metrics.widthPixels;
int screenHeight= metrics.heightPixels;
imageViewHeight=screenWidth;

//设置
//总高度设置
ConstraintLayout.LayoutParams layoutParams_all= (ConstraintLayout.LayoutParams) relativeLayout_all.getLayoutParams();
layoutParams_all.height=screenHeight+screenWidth;
relativeLayout_all.setLayoutParams(layoutParams_all);
//显示部分高为屏幕高
RelativeLayout.LayoutParams layoutParams_button= (RelativeLayout.LayoutParams) relativeLayout_button.getLayoutParams();
layoutParams_button.height=screenHeight;
relativeLayout_button.setLayoutParams(layoutParams_button);
//头部分为屏幕宽
RelativeLayout.LayoutParams layoutParams_image= (RelativeLayout.LayoutParams) imageView.getLayoutParams();
layoutParams_image.height=imageViewHeight;
imageView.setLayoutParams(layoutParams_image);
//隐藏部分
relativeLayout_all.setPadding(0,0-imageViewHeight,0,0);

//Handler用于UI变更
Handler handler=new Handler(){
    public void handleMessage(@NonNull Message msg) {
        switch (msg.what){
            case 1:button.setEnabled(false);break;
            case 2:button.setEnabled(true);break;
            case 3:relativeLayout_all.setPadding(0,msg.arg1,0,0);
        }
    }
};

//按钮监听器
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Thread thread=new Thread(){
            public void run() {
                //按钮失效
                Message message=new Message();
                message.what=1;
                handler.sendMessage(message);
                //刷新头下降
                int nowTop=0-imageViewHeight;
                while (true){
                    nowTop=nowTop+8;
                    if(nowTop>=0){
                        nowTop=0;
                    }
                    message=new Message();
                    message.what=3;
                    message.arg1=nowTop;
                    handler.sendMessage(message);
                    if(nowTop==0){
                        break;
                    }
                    try {
                        Thread.sleep(40);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
                //刷新头上升
                while (true){
                    nowTop=nowTop-8;
                    if(nowTop<=0-imageViewHeight){
                        nowTop=0-imageViewHeight;
                    }
                    message=new Message();
                    message.what=3;
                    message.arg1=nowTop;
                    handler.sendMessage(message);
                    if(nowTop==0-imageViewHeight){
                        break;
                    }
                    try {
                        Thread.sleep(40);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
                //按钮显示
                message=new Message();
                message.what=2;
                handler.sendMessage(message);
            }
        };
        thread.start();
    }
});
相关推荐
阿伟*rui2 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
XiaoLeisj4 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei4 小时前
java的类加载机制的学习
java·学习
Yaml46 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~6 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616886 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7896 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java7 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~7 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust