文档章节

GridView横向显示 实现图片预览

北ing
 北ing
发布于 2015/10/20 19:22
字数 408
阅读 50
收藏 0

先附效果图:
这里写图片描述

实现原理:布局文件中在GridView外套一层HorizontalScrollView

1) 定义主界面布局:

<LinearLayout 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" tools:context="${relativePackage}.${activityClass}" >

    <HorizontalScrollView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollbars="none" >
        <LinearLayout  android:layout_width="wrap_content" android:layout_height="wrap_content" >
            <GridView  android:id="@+id/gridView" android:layout_width="match_parent" android:layout_height="match_parent" />
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

2) 定义一个item:只显示一张图片

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center">
    <ImageView  android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/mm3" />
</LinearLayout>

3)注意在布局文件中gridview标签中没有定义其他的属性,需要在程序中动态获取才行。

public class MainActivity extends Activity {
    GridView gridView;
    int[] data = { R.drawable.mm1, R.drawable.mm2, R.drawable.mm3,
            R.drawable.mm4, R.drawable.mm5, R.drawable.mm6, };
    int count = data.length;// 总项数
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        gridView = (GridView) findViewById(R.id.gridView);

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int columnWidth = dm.widthPixels;//由一屏幕显示的项数决定
        LayoutParams params1 = new LayoutParams(
                count * columnWidth + count, LayoutParams.WRAP_CONTENT);//
        gridView.setLayoutParams(params1);//设置高和宽
        gridView.setColumnWidth(columnWidth/1);//根据你一屏显示的项数决定
        gridView.setHorizontalSpacing(1);
        gridView.setStretchMode(GridView.NO_STRETCH);
        gridView.setNumColumns(count);//设置一行显示的总列数

        ImageAdapter adapter = new ImageAdapter();
        gridView.setAdapter(adapter);       
    }


    class ImageAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return data.length;
        }

        @Override
        public Object getItem(int position) {
            return data[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, parent, false);
            ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
            imageView.setImageResource(data[position]);
            return convertView;
        }
    }
}

LayoutParams params1 = new LayoutParams(
count * columnWidth + count, LayoutParams.WRAP_CONTENT);
关键就是这里,这里让gridView的宽度直接是一行显示时所有列宽的和。

源码实例

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
北ing
粉丝 0
博文 12
码字总数 17332
作品 0
海淀
一个完整的壁纸应用——[仿爱壁纸],从设计到实现的过程

一个完整的壁纸应用——[仿爱壁纸],从设计到实现的过程 正如我的GitHub上的README上说的,偶然之间发现了一个接口,觉得挺有意思的,于是乎,就开始着手的写一个壁纸类应用了,其实之前就一...

刘桂林
2017/01/21
0
0
图片处理工具

Android7.0 完美适配——FileProvider 拍照裁剪全解析 适配 android7.0 中的拍照相册裁剪功能 使用 photoView 实现可点击放大到全屏显示的控件,效果类似于微信朋友圈点开看大图 使用 photoV...

掘金官方
2017/12/11
0
0
Android 滑动效果基础篇(四)—— Gallery + GridView

Android系统自带一个GridView和Gallery两个控件,GridView网格显示,Gallery单个浏览,两者结合起来可以真正实现Gallery浏览图片效果。 本示例通过GridView和Gallery两个控件,模仿实现一个完...

长平狐
2013/01/06
253
0
【转载】Android RecyclerView 使用完全解析 体验艺术般的控件

崇拜下鸿洋大神,原文地址:http://blog.csdn.net/lmj623565791/article/details/45059587 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进...

桀骜不驯24
09/11
0
0
Android RecyclerView 使用完全解析 体验艺术般的控件

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/45059587; 本文出自:【张鸿洋的博客】 概述 RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过...

丁佳辉
2016/03/07
129
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 入门 - 进阶篇(4)- REST访问(RestTemplate)

经常需要发送一个GET/POST请求到其他系统(REST API),通过JDK自带的HttpURLConnection、Apache HttpClient、Netty 4、OkHTTP 2/3都可以实现。 HttpClient的使用:http://rensanning.iteye.c...

onedotdot
26分钟前
2
0
Wi-Fi也有版本号了!

据Solidot消息,行业组织 Wi-Fi 联盟宣布当前的版本 Wi-Fi 802.11ac 重命名为 Wi-Fi 5,而下一个版本 802.11ax 重命名为 Wi-Fi 6,之前的版本 802.11n 改名为 Wi-Fi 4。 Wi-Fi 标准之前使用单...

linux-tao
28分钟前
3
0
项目经验不丰富、技术不突出的程序员怎么打动面试官?

前言 相信不少的程序员都有过类似的困惑:如果我没有大型的项目经历,也不能靠技术征服面试官,那我要怎么才能给面试官留下一个好印象呢? 按照本人的面试经验来说,面试主要看几点:项目经验...

Mamba1
38分钟前
2
0
MyBatis 源码分析----MyBatis 整体架构概要说明

MyBatis整体架构 MyBatis的整体架构分为三层1:基础支持层,2:核心处理层,3:接口层 1:基础支持层: 1-1反射模块: 该模块对Java 原生的反射进行了良好的封装,提供了更加简洁易用的API ,...

西瓜1994
44分钟前
7
0
如何让 J2Cache 在多种编程语言环境中使用

现在的系统是越来越复杂了,不仅仅是功能复杂,系统结构也非常复杂,而且经常在一个系统里包含几种不同语言编写的子系统。例如用 JavaScript 做前端开发、用 Java/PHP 等等做后端,C/C++/Go ...

红薯
46分钟前
46
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部