`
104zz
  • 浏览: 1507760 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

android 使用GridView实现Gallery的效果,并且从最左边开始

阅读更多

效果如下图:

 

1.首先设计man.xml这里使用HorizontalScrollView结合GridView实现Gallery的左右滚动效果,并且解决了Gallery从中间开始的问题,GridView可以从最左边开始显示。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <!-- Gallery view 图片效果图 -->
   	<HorizontalScrollView 
   		android:id="@+id/galleryScroll"
		android:layout_width="fill_parent"
		android:layout_height="90dip"
		android:scrollbars="none"
		android:focusable="false"
		android:layout_alignParentBottom="true"
		android:background="@drawable/gallerybackground"
		>
		<FrameLayout 
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:focusable="false"
			>
			<!--注意这里 宽度一定要设置不然不能达到效果  -->
			<LinearLayout 
				android:layout_width="770dp"
				android:layout_height="wrap_content" 
				android:orientation="horizontal"
				android:focusable="false"
				>
				<GridView android:id="@+id/gallery" 
					android:layout_width="fill_parent"
					android:gravity="center" 
					android:layout_height="wrap_content"
					android:horizontalSpacing="1.0dip" 
					android:verticalSpacing="1.0dip"
					android:stretchMode="spacingWidthUniform" 
					android:numColumns="auto_fit"
					android:columnWidth="70dip"
					android:focusable="false"
					>
				</GridView>

			</LinearLayout>
		</FrameLayout>
	</HorizontalScrollView>
</LinearLayout>
 

2.图片列表适配的实现,如下:

package com.src;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ImageAdapter extends BaseAdapter{
	
	private static String[] effectTitle = {"原图", "柔光", "LOMO", "复古", "古典", "黑白", 
			"淡雅", "哥特风", "暖化", "水印", "印象"};
	private static int[] effectDrawable = {R.drawable.lomoeffect_01, R.drawable.lomoeffect_02, 
		R.drawable.lomoeffect_03, R.drawable.lomoeffect_04, 
		R.drawable.lomoeffect_05, R.drawable.lomoeffect_06, 
		R.drawable.lomoeffect_07, R.drawable.lomoeffect_08, 
		R.drawable.lomoeffect_09, R.drawable.lomoeffect_10, 
		R.drawable.lomoeffect_11};
	 
	
	private ArrayList<GalleryInfo> list;
	private LayoutInflater inflater;
	public ImageAdapter(Context context) {
        super();
        list = new ArrayList<GalleryInfo>();
        inflater = LayoutInflater.from(context);
       // 初始化数据
        for (int i=0; i<effectDrawable.length; i++) {
        	GalleryInfo info = new GalleryInfo();
        	info.title = effectTitle[i];
        	info.drawable = effectDrawable[i];
        	if (i ==0 ) {
        		//默认第一项问选中
        		info.isSelect = true;
        	} else {
        		info.isSelect = false;
        	}
        	list.add(info);
        }
    }

    
    public int getCount() {
        return effectTitle.length;
    }

    
    public Object getItem(int position) {
        return position;
    }

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

    
    public View getView(int position, View convertView, ViewGroup parent) {
    	
    	ViewHolder holder;
    	if (convertView == null) {
    		convertView = inflater.inflate(R.layout.gallery_item, null);
    		holder = new ViewHolder();
    		holder.effectTitle = (TextView)convertView.findViewById(R.id.effectTitle);
    		holder.effectDrawable = (ImageView)convertView.findViewById(R.id.effectDrawable);
    		convertView.setTag(holder);
    	} else {
    		holder = (ViewHolder)convertView.getTag();
    	}
    	
    	holder.effectTitle.setText(list.get(position).title);
    	holder.effectDrawable.setImageResource(list.get(position).drawable);
        
        if (list.get(position).isSelect) {//被选中的选项加选中的背景框
        	holder.effectDrawable.setBackgroundResource(R.drawable.gallery_select);
        }else {//未被选中的选项设置背景透明
        	holder.effectDrawable.setBackgroundDrawable(null);
        }
        
//        notifyDataSetChanged();
        return convertView;
    }
    
    public void changeStatus(int select) {
    	for (int i=0; i<list.size(); i++) {
    		list.get(i).isSelect = false;
    	}
    	
    	list.get(select).isSelect = true;
    }
    
    private class ViewHolder {
    	TextView effectTitle;
    	ImageView effectDrawable;
    }
    
    class GalleryInfo {
    	public String title;
    	public int drawable;
    	public boolean isSelect;
    }

}
 

3.测试实例效果,代码如下:

package com.src;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;

public class GrideToGalleryActivity extends Activity {

	private GridView gallery;
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);     
        final ImageAdapter adapter = new ImageAdapter(this);
        gallery = (GridView)findViewById(R.id.gallery);
        gallery.setAdapter(adapter);
        gallery.setNumColumns(11);       
        gallery.setOnItemClickListener(new OnItemClickListener() {			
			public void onItemClick(AdapterView<?> arg0, View arg1, int select,
					long arg3) {
				adapter.changeStatus(select);//设置选中项
				adapter.notifyDataSetChanged();//更新列表
			}
		});
        
        gallery.setOnTouchListener(new OnTouchListener() {						
			public boolean onTouch(View v, MotionEvent event) {
				v.clearFocus();
				return false;
			}
		});
    }
}
 源代码附件

  • 大小: 163.8 KB
分享到:
评论
3 楼 dongshuai1991 2013-09-17  
在不知道图片数的情况下 怎么去确定 linearlayout的宽度?  这是个bug  楼主有解决方法吗
  qq我  1790542492
2 楼 xianjiajun22 2013-04-23  
lz你好,我下了你的demo,好像是在做滤镜吧,可以看看吗?
1 楼 gyhcom 2012-12-08  
太感谢了,非常有用!

相关推荐

    GridView实现Gallery效果

    在某些情况下,Gallery的效果可能不尽如人意,这时开发者可能会选择使用GridView来模拟实现Gallery的效果。下面将详细解释如何使用GridView实现类似Gallery的功能,以及如何添加点击选中效果。 首先,我们需要理解...

    Android 滑动效果 Gallery + GridView

    在Android开发中,滑动效果是用户界面设计中不可或缺的一部分,为用户提供流畅的交互体验。本主题主要聚焦于两种常见...通过实践,你将能够熟练掌握Android Gallery和GridView的滑动效果,并能灵活运用到自己的项目中。

    android gridView实现自定义gallery

    在Android开发中,有时我们需要创建一个可滚动的视图,其中包含多个可点击或交互的项目,这通常可以通过使用Gallery控件来实现。然而,Gallery控件存在一些限制,例如在其两端会保留一定的空白区域,这可能不符合...

    gridView 实现gallery滑动

    在本篇文章中,我们将深入探讨如何在Android中使用GridView来实现类似Gallery的滑动体验,并防止滑动过快导致的用户体验不佳问题。 首先,我们需要了解GridView的基本用法。GridView继承自AbsListView,它将数据...

    一个简单的相册GridView、Gallery的结合使用

    本项目“一个简单的相册GridView、Gallery的结合使用”恰好展示了如何整合这两个组件来实现这一功能。GridView和Gallery都是Android提供的布局控件,它们在显示数据集方面有各自的优势。 ** GridView详解:** ...

    Gallery+GridView使用的demo

    在早期的Android版本中,`Gallery`是实现轮播效果或者选择器的理想选择。然而,由于API 17(Android 4.2)中`Gallery`已被废弃,开发者通常转向其他替代方案,如`ViewPager`。尽管如此,理解`Gallery`的工作原理对于...

    Android GridView,Gallery动态更新数据(整理自网络)

    Android GridView,Gallery动态更新数据(整理自网络)

    android 自定义gridView 按日期显示图片和视频 galleryDemo

    android 自定义gridView 按日期显示图片和视频 galleryDemo android 自定义gridView 按日期显示图片和视频 galleryDemo android 自定义gridView 按日期显示图片和视频 galleryDemo 免费下载 给个好评!

    android控件ListView. GridView.gallery应用

    在数据源适配器知识点上面,我们可以自己定义一个数据源适配器,要继承BaseAdapter,实现getView的方法 画廊控件:gallery imageswitch HorizontalScrollView,在一个屏幕上显示出超过屏幕尺寸的内容

    android实现横向滑动解决Gallery从中间滑动的问题

    本教程将介绍如何使用GridView来实现类似Gallery的功能,并确保它从最左边开始滑动。 首先,我们需要理解GridView的基本用法。GridView是一种可以显示二维网格布局的视图,通常用于显示大量小图标或者图片,每个...

    Android Gallery 3D效果

    在Android早期版本中,`Gallery`被广泛用来创建类似相册的3D效果,尽管在API 16之后,它被`GridView`和`RecyclerView`等更灵活的视图替代。然而,通过一些自定义实现,我们仍然可以创建出类似`Gallery 3D`的效果。 ...

    Android的GridView和Gallery结合Demo

    Demo介绍:首页是一个GridView加载图片,竖屏...点击某一张图片,会链接到Gallery页面,由于Android自带的Gallery控件滑动效果很不好(滑动一次会加载好多张图片),这里对Gallery进行了扩展,滑动一次只加载一张图片。

    图片浏览(带水平滑动的GridView和带gallery的ViewPage)

    Gallery是Android早期的一个组件,它允许用户水平滚动查看多个项目,但由于API等级限制,从Android 5.0(API级别21)开始被废弃。然而,我们可以通过继承HorizontalScrollView并添加必要的触摸事件处理,来复现...

    Android编程滑动效果之Gallery+GridView实现图片预览功能(附demo源码下载)

    本文实例讲述了Android编程滑动效果之Gallery+GridView实现图片预览功能。分享给大家供大家参考,具体如下: Android系统自带一个GridView和Gallery两个控件,GridView网格显示,Gallery单个浏览,两者结合起来可以...

    android gallery 3D效果

    在Android平台上,`Gallery`组件曾经是实现3D滚动效果的一种流行方式,它允许用户以横向滑动的方式浏览图片或项目列表,同时提供了一种视觉上的立体感。然而,随着Android版本的更新,`Gallery`组件在API 16...

    ListView之+GridView+Gallery图片计时滚动

    在Android开发中,...总的来说,"ListView之+GridView+Gallery图片计时滚动"这个主题涵盖了Android UI开发中的基础组件和常见的滚动效果实现,对于Android开发者来说,掌握这些知识将有助于构建更丰富的用户界面。

    Android开发学习笔记 Gallery和GridView浅析

    Android开发中的`Gallery`和`GridView`都是用于展示数据的视图组件,常用于创建图像或者项目的列表。在本文中,我们将深入探讨这两个组件的特性和使用方法。 ### Gallery组件详解 `Gallery`是一个水平滚动的视图,...

    Android代码-水平或垂直双向滚动​​的AndroidGridView

    An Android GridView that can be configured to scroll horizontally or vertically. I should have posted this over a year and a half ago, but never got around to it. I needed a grid view that in portrait...

    Gridview高级使用技巧

    例如,在数据更新或插入时,使用`android.widget.Gallery`的动画效果,或者自定义`Animator`来实现更个性化的动画。 7. **Header和Footer** 如果需要在GridView头部或尾部添加额外的信息或操作按钮,可以通过`...

    Gallery和GridView浅析

    与Gallery不同,GridView允许垂直和水平滚动,并且每个单元格可以有不同的宽度和高度。 1. GridView常用属性: - `android:numColumns`:设置GridView显示的列数,可以是自动适应屏幕宽度的整数值(例如"auto_fit...

Global site tag (gtag.js) - Google Analytics