`

让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已经定位了,后面再改变就出错了。还是还有其他的步骤

相关推荐

    android UI设计

     看到很多应用上的UI都很不错,最近自己结合Gridview的拖动,广告的滑动,无限循环gallery,图片的缩放旋转、拖动做了一个小demo,留着以后要做的时候直接用,

    Android基础知识详解

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

    Universal_Image_Loader

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

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

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

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

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

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

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

    Google Android SDK开发范例大全的目录

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

    Google+Android+SDK开发范例大全

    3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——...

    Google Android SDK开发范例大全(完整版附部分源码).pdf

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

    zxing.java源码解析-OpenProject:常用三方库收集,Android高级面试

    ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、FlipView、ColorPickView、GraphView、UI Style 等等。 一、ListView ...

    Google Android sdk 开发范例大全 部分章节代码

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

    Google Android SDK 开发范例大全01

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

    Google Android SDK 开发范例大全02

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

    Google Android SDK开发范例大全(完整版)

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

    疯狂Android讲义源码

     2.4.12 画廊视图(Gallery)的功能和  用法 107  2.5 对话框 110  2.5.1 使用AlertDialog创建简单  对话框 110  2.5.2 使用AlertDialog创建列表  对话框 112  2.5.3 使用AlertDialog创建自定义  对话框 ...

    疯狂Android讲义.part2

    2.4.12 画廊视图(Gallery)的功能和 用法 107 2.5 对话框 110 2.5.1 使用AlertDialog创建简单 对话框 110 2.5.2 使用AlertDialog创建列表 对话框 112 2.5.3 使用AlertDialog创建自定义 对话框 116 2.5.4 使用...

    疯狂Android讲义.part1

    2.4.12 画廊视图(Gallery)的功能和 用法 107 2.5 对话框 110 2.5.1 使用AlertDialog创建简单 对话框 110 2.5.2 使用AlertDialog创建列表 对话框 112 2.5.3 使用AlertDialog创建自定义 对话框 116 2.5.4 使用...

Global site tag (gtag.js) - Google Analytics