纯原生打造GridView单行横向滑动(宽度自适应在父布局居中),手机屏幕px和dp的互换方法,附禁止滑动的自定义方法
来源:互联网 发布:java 垃圾回收 手动 编辑:程序博客网 时间:2024/06/04 20:01
布局文件:
HorizontalScrollView包裹LinearLayout(只能包裹这个),放入GridView,先实现横向滑动
<HorizontalScrollView android:fillViewport="true" android:layout_width="match_parent" android:layout_height="85dp" android:scrollbars="none" android:layout_gravity="center_horizontal" android:background="@android:color/white"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal"> <GridView android:id="@+id/gv_tequan" android:layout_width="wrap_content" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:scrollbars="none" android:layout_gravity="center_horizontal" android:listSelector="#00000000"></GridView> </LinearLayout><!--@color/title_bg_color android:scrollbars="horizontal"--> </HorizontalScrollView>
Java代码将GridView改成单行横向布局的工具类方法
只需要传入要改变的GridView对象和item的宽度即可实现
private void changeGridView(GridView mContentGv) { LinearLayout.LayoutParams params=null; int with=this.getWindowManager().getDefaultDisplay().getWidth();//获取手机屏幕宽度px int withdip=DensityUtil.px2dip(this,with);//dip int size = img_tequan.length; // item宽度Gridview宽度在这里动态设置的 int shang=(int) withdip/80; int itemWidth = DensityUtil.dip2px(this, 80); int totalWidth=0; if (shang>size){//item数量小于可以显示的最大容量// itemWidth =DensityUtil.px2dip(this, (int)withdip/(size));// totalWidth=DensityUtil.px2dip(this, itemWidth*size); totalWidth= itemWidth*size; mContentGv.setGravity(Gravity.CENTER_HORIZONTAL); }else if(shang<=size) {// itemWidth=DensityUtil.px2dip(this, 85); totalWidth=itemWidth*size+size; } // item之间的间隔// int itemPaddingH = DensityUtil.dip2px(this, 1); // 计算GridView宽度 size * (itemWidth + itemPaddingH) int gridviewWidth = totalWidth; params = new LinearLayout.LayoutParams( gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT); mContentGv.setLayoutParams(params); mContentGv.setColumnWidth(itemWidth);// mContentGv.setHorizontalSpacing(itemPaddingH); mContentGv.setStretchMode(GridView.NO_STRETCH); mContentGv.setNumColumns(size); }
上文中的DensityUtil也是一个封装的方法,用来实现手机屏幕像素px和安卓开发的虚高和虚宽的相互转换,代码如下:
public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) * * @param context 上下文 * @param dpValue dp值 * @return px值 */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * * 根据手机的分辨率从 px(像素) 的单位 转成为 dp * */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); }}
经过以上方法设置就可以实现GridView自适应宽度并且在父布局居中显示,
当item的总宽小于屏幕宽度时居中显示不滑动,
当item的总宽大于屏幕宽度时根据传入的item宽度计算总宽度,实现单行横向滑动
附:GridView禁止滑动的自定义方式:
GridView默认是竖直滑动,有时候只有一行也会滑动一点,为了显示效果简介需要禁止滑动,自定义GridView重写 dispatchTouchEvent方法,截取滑动事件:
public class MyGridView extends GridView { public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_MOVE){ return true;//禁止Gridview进行滑动 } return super.dispatchTouchEvent(ev); }
阅读全文
0 0
- 纯原生打造GridView单行横向滑动(宽度自适应在父布局居中),手机屏幕px和dp的互换方法,附禁止滑动的自定义方法
- android 单行gridview横向滑动的实现
- android中禁止GridView滑动的方法
- GridView禁止横向滑动
- 横向滑动的GridView
- android中禁止GridView上下滑动的方法
- android中禁止GridView上下滑动的方法
- Android网页宽度自适应手机屏幕宽度的方法
- Android横向滑动的GridView
- 单行横向滑动的日历calendar控件
- Android中单行横向滑动的日历
- CSS+JS打造的自适应宽度的滑动门和选项卡
- 【Android】禁止滑动的GridView
- 安卓工具类1——像素PX和dp互相转换的方法(获取手机屏幕尺寸PX)
- 自定义HorizontalScrollView(横向滑动的ScrollView)
- android GridView禁止上下滑动以及禁止滚动条显示的方法。
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- js生成随机数(数字+字母)
- iOS 逆向REMOTE HOST IDENTIFICATION HAS CHANGED 问题解决
- 递归——算24
- 计算机视觉:从CV基础到深度学习
- 日期插件 pikaday.js 自己使用的小心得 希望能帮到你们
- 纯原生打造GridView单行横向滑动(宽度自适应在父布局居中),手机屏幕px和dp的互换方法,附禁止滑动的自定义方法
- Java中一个类怎么实现两个接口中相同名字的抽象方法
- WPF 为PasswordBox控件的Password增加绑定功能
- maven配置环境
- 高德地图vs百度地图
- 更换jdk版本:jdk1.8更换为jdk1.7之后输入java -version还是出现1.8的版本号
- iOS UINavigationController
- 模拟 co.js 的实现原理 (koa中间件的实现)
- 翻译QT基于TCP聊天室server