负值遮挡视图(下拉刷新头部)"/>
Padding负值遮挡视图(下拉刷新头部)
padding值为负值时,表示当前视图被遮住了一部分。
可使用 view.set Padding( int left , int top , int right , int bottom) 方法进行动态设置。
下拉刷新头部的实现:
(1) 获取屏幕大小。
(2) 设置 刷新头高度(定值)
设置 显示部分高度为/屏幕高度(定值)
设置 整体高度 为刷新头高与屏幕高之和(定值)
(3) 将整体的 paddlingTop 设为负值时即可遮住刷新头。(为0-刷新头高时遮住全部刷新头)
(4) 整体的paddingTop值进行动态设置:
0-刷新头高 -> 不断增加 -> 0(完全展示) -> 不断减少 -> 0-刷新头高
//例
//整体为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();}
});
更多推荐
Padding负值遮挡视图(下拉刷新头部)
发布评论