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();
    }
});
相关推荐
老白干2 分钟前
基于 Spring AOP 的操作日志记录:以 DeptController 增删接口为例
java·python·spring
晚安code1 小时前
Java编程规范避坑指南:阿里开发手册15条强制规约实战解析
java·后端
2501_915106321 小时前
iOS 证书类型及作用说明 账号证书与签名配置的完整解读
android·ios·小程序·https·uni-app·iphone·webview
九皇叔叔1 小时前
RHEL9 安装 MySQL 8.4.11.LTS 版本
android·mysql·adb
海兰1 小时前
【数据库】tdsql(MySQL )的事务隔离级别
android·数据库·mysql
小蒜学长1 小时前
“守望自然”招募志愿者环保行动网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
哆啦A梦z1 小时前
Android BLE 实战:从小米手环 7 踩坑到完整连接框架
android
IKUN家族2 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
萧瑟余晖2 小时前
Java深入解析篇十八之响应式编程
java·开发语言
笑一下蒜了.2 小时前
Linux 存储多路径访问手册|multipath.conf 各配置段详解
android·linux·运维