`

让GridView拥有Gallery的拖动功能

XML 
阅读更多
利用Gallery的拖动功能,能很容易的将在一行上显示不下的内容显示出来。
这种特性可以用在菜单上(如果菜单足够多,以至一行显示不下)。
但是Gallery有个不爽的地方,就是被点击的那个item会一直出现在中间,有时候我们并不需要这样的“智能”!怎么办呢?
那就利用GridView,将GridView放在HorizontalScrollView中,如下:
<?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">

   	<RelativeLayout android:background="#030e13"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
	    >
	    <ImageView android:id="@+id/webnav_left" 
	        android:layout_width="8dip"
	        android:layout_height="wrap_content"
	        android:layout_centerVertical="true"
	        android:src="@drawable/news_left"
			/>
	    <ImageView android:id="@+id/webnav_right" 
	        android:layout_width="8dip"
	        android:layout_height="wrap_content"
    		android:layout_alignParentRight="true"
	        android:layout_centerVertical="true"
	        android:src="@drawable/news_right"
			/>
		<HorizontalScrollView android:layout_width="fill_parent"
	        android:layout_height="wrap_content"
       		android:layout_toLeftOf="@id/webnav_right"
       		android:layout_toRightOf="@id/webnav_left"
	        android:scrollbars="none">
	        <LinearLayout android:layout_width="fill_parent"
	            android:layout_height="wrap_content">
	            <LinearLayout android:id="@+id/layout_webnav" 
	            	android:layout_width="800dip"
	                android:layout_height="wrap_content"
	                android:orientation="horizontal"> 
				  	<GridView android:id="@+id/gallery_webnav" 
						android:layout_width="fill_parent"
						android:layout_height="fill_parent"
						android:background="#030e13"
				        android:gravity="center" 
				        android:numColumns="auto_fit"
				        android:listSelector="#00000000">
				    </GridView> 
	    		</LinearLayout>
	        </LinearLayout>
	    </HorizontalScrollView>
  	</RelativeLayout>

</LinearLayout>

注意上面id为layout_webnav的LinearLayout,这里的layout_width是需要计算的!见下面代码。
public class Test_2_Activity  extends Activity{

	private final int per=3;//每行显示的个数
	private GridView gridView;
	 @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.test2);
	        DisplayMetrics dm = new DisplayMetrics();
	        dm = getApplicationContext().getResources().getDisplayMetrics();
	        int menuWidth = dm.widthPixels-16;
	        
	        gridView= (GridView) findViewById(R.id.gallery_webnav); 
	        int itemWidth = menuWidth/per;
	        gridView.setColumnWidth(itemWidth);
	        
	        ArrayList<Map<String,String>> data=new ArrayList<Map<String,String>>();
	        Map<String,String> map;
	        for(int i=0;i<5;i++){
	        	map=new HashMap<String,String>();
	        	map.put("simple_item_1", "name"+i);
	        	map.put("simple_item_2", "age"+i);
	        	map.put("simple_item_3", "class"+i);
	        	data.add(map);
	        }
	        int resource=R.layout.row_test2;
	        String[] from={"simple_item_1","simple_item_2","simple_item_3"};
	        int[] to={R.id.simple_item_1,R.id.simple_item_2,R.id.simple_item_3};
	        SimpleAdapter adapter=new SimpleAdapter(this, data, resource, from, to);
	        
	        gridView.setAdapter(adapter);
	        
	      //让GridView一行显示,这里的layout_width是需要计算的
	        LinearLayout layout = (LinearLayout) findViewById(R.id.layout_webnav); 
	        layout.setLayoutParams(new LayoutParams(itemWidth*data.size(), LayoutParams.WRAP_CONTENT));
	        
	        gridView.setSelection(0);
                gridView.setOnItemClickListener(listener);
	 }
}

注意上面的itemWidth*data.size(),这里才是LinearLayout的实际宽度!

R.layout.row_test2布局如下:
<?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"
    >
  	<TextView android:id="@+id/simple_item_1"
	    android:layout_width="fill_parent" 
	    android:layout_height="fill_parent" 
	    android:gravity="center"
	    />
    <RelativeLayout android:background="#030e13"
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent"
	    >
	    <TextView android:id="@+id/simple_item_2"
	    android:layout_width="wrap_content" 
	    android:layout_height="wrap_content" 
	    android:layout_alignParentLeft="true"
	    android:paddingLeft="10dp"
	    />
	    <TextView android:id="@+id/simple_item_3"
	    android:layout_width="wrap_content" 
	    android:layout_height="wrap_content" 
	    android:layout_alignParentRight="true"
	    android:paddingRight="10dp"
	    />
	</RelativeLayout>
</LinearLayout>

运行后显示的效果:


看不出什么,呵呵,拖动一下看看。


  • 大小: 5.8 KB
  • 大小: 8.5 KB
分享到:
评论
2 楼 seatide 2011-03-02  
解决了,虽然解决了,但是是用动态添加的方法布局的。如果还有更好的方法也可以说一下 
1 楼 seatide 2011-03-02  
  LinearLayout layout = (LinearLayout) findViewById(R.id.layout_webnav);   
            layout.setLayoutParams(new LayoutParams(itemWidth*data.size(), LayoutParams.WRAP_CONTENT));  

这段后面添加的代码,我每次弄到这里都出错了。是不是前面gridView已经定位了,后面再改变就出错了。还是还有其他的步骤

相关推荐

    gallery放大缩小拖拽

    图片拖拽功能则需要监听用户的触摸或鼠标移动事件。在Web开发中,可以使用`mousedown`、`mousemove`和`mouseup`事件来跟踪鼠标位置,然后更新图片的`left`和`top`属性。在移动应用中,同样需要监听触摸事件,如...

    Gallery可拖动的图标

    标题中的“Gallery可拖动的图标”指的是在软件或应用中,用户可以通过拖放操作来改变图标的排列顺序或位置的交互设计。这种设计常见于手机桌面、应用启动器、图片浏览器等,允许用户根据个人喜好自定义界面布局。在...

    图片浏览(带水平滑动的GridView和带gallery的ViewPage)|kobeyxyx-6235953-ImageView.zip

    本示例主要关注如何实现一个具有水平滑动的GridView以及带有Gallery效果的ViewPage,并且支持图片的缩放和网络图片的显示。以下将详细讲解这些知识点。 首先,我们来看“带水平滚动的GridView”。在Android的默认...

    android4.0 Gallery相册 源代码

    9. **动画效果**:Gallery还使用` OverscrollDrawable`来处理边缘拖动时的视觉效果,如弹性回弹和拉伸效果。 通过分析和学习`Gallery`的源代码,开发者可以了解到Android UI组件的实现原理,以及如何处理触摸事件、...

    安卓Gallery照片墙画廊图库相关-DragToSortImage相册加载和图片拖拽.rar

    在安卓开发中,"Gallery照片墙画廊图库"是一个重要的功能模块,它涉及到用户对手机中图片的浏览、管理及个性化操作。本项目"DragToSortImage相册加载和图片拖拽"聚焦于实现这一功能的一个特定需求:允许用户通过拖拽...

    安卓Gallery照片墙画廊图库相关-Android实现左右滑动查看图片效果.rar

    Gallery组件在早期版本的Android API中被广泛用于实现图片浏览,但在API 16之后被替换为GridView和RecyclerView等更灵活的视图。尽管如此,了解如何使用Gallery仍然是有价值的,因为有些开发者可能仍需支持较低版本...

    android Gallery相册浏览器

    在Android开发中,`Gallery`组件是用于展示一系列图片或者视图的一个滚动控件,它允许用户通过水平滑动来浏览多个项目。然而,自Android 3.0(API级别11)开始,原生的`Gallery`组件已经被弃用,取而代之的是更灵活...

    图片浏览器技术点分析以及实践指导书.pdf

    5. **图片的多点触控与手势操作**:在大图查看模式下,实现多点触控(pinch-to-zoom)和图片拖拽功能,需要用到GestureDetector和ScaleGestureDetector等手势检测类。这些技术允许用户通过手指的触摸动作来缩放图片...

    android UI设计

    自定义View可以让开发者根据需求创建独特的UI元素,而自定义Adapter则能够将数据绑定到GridView或ViewPager等组件上,以便展示。 7. **性能优化**: 在处理大量图片或者动画时,需要注意内存管理和性能优化。例如,...

    Android编程仿Iphone拖动相片特效Gallery的简单应用示例

    2. **BaseAdapter**:这是Android中用于填充各种可滚动视图(如ListView、GridView、Gallery等)的数据适配器。它需要重写`getCount()`、`getItem()`、`getItemId()`和`getView()`方法。 3. **ImageView.ScaleType**...

    安卓图片多选相关-Android图片选择预览九宫格图片控件拖拽排序九宫格图片控件.rar

    最后,**拖拽排序** 功能使得用户可以通过触摸和拖动图片来改变九宫格中的顺序。这需要实现`View.OnTouchListener`,检测用户的滑动事件,然后在触摸事件中更新数据源和视图。通常会结合`ItemTouchHelper`,这是一个...

    Android基础知识详解

    GridView、Gallery和ImageSwitcher 88 GridView 88 Gallery和ImageSwitcher 91 ListView 94 一、普通的ListView 94 可以单选和多选的ListView 95 使用SimpleAdapter建立复杂的列表项 97 自定义Adapter来建立复杂的...

    Universal_Image_Loader

    很多人都在讨论如何让图片能在异步加载更加流畅,可以显示大量图片,在拖动ListView的时候不会出现卡的现象。关于ImageLoader这个开源框架的使用有很多网友都介绍过,不过还不够清楚,这里有一个关于这个开源项目的...

    android常见控件和使用方法

    - **功能介绍**:`Gallery`组件允许用户水平滑动浏览一系列项目,适用于图像或广告轮播等场景。 以上介绍了Android开发中常用的一些UI控件及其基本使用方法。掌握这些控件可以帮助开发者更好地构建功能丰富的应用...

    Android_控件运用

    RatingBar 是一个显示星形评分的控件,用户可以拖动滑块来改变评分,常用于评价或评级场景。 5. **Android 控件之 ImageSwitcher** ImageSwitcher 用于在两个图像之间进行快速切换,常用于实现类似图片幻灯片的...

    Android组件详解

    日期与时间组件在Android中主要用于处理与时间和日期相关的功能,如显示当前时间、让用户选择日期或时间等。Android提供了多个类来满足这些需求,如DatePicker、TimePicker、CalendarView等。 其中,DatePicker和...

    Android程序研发源码Android 仿UC,墨迹天气左右拖动多屏幕显示效果源码.rar

    在Android程序开发中,创建一个类似UC浏览器或墨迹天气那样可以左右拖动切换的多屏幕显示效果是一项常见的需求。这种效果通常被称为“滑动画廊”或“Fling Gallery”,它提供了用户友好的界面,使得用户可以通过手势...

    Android手机应用程序开发

    - **拖动条**(SeekBar):与进度条类似,但用户可以通过拖动滑块手动调整值,常见于音量控制、亮度调节等场景。 - **星级评分条**(RatingBar):允许用户对内容进行评分,通常为半星或全星制,常用于电影评价、...

    android学习入门资料

    除了ListView,文中还提及了其他一些Android控件和组件,如`ActionBar`、`Menu`、`ViewPager`、`Gallery`、`GridView`、`ImageView`、`ProgressBar`、`Dialog`、`Toast`、`EditText`、`TableView`和`Activity ...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮...

Global site tag (gtag.js) - Google Analytics