• Android百日程序:GridView实现相冊效果


    本章使用GridView控件来做一个相冊效果。

    图片效果例如以下:


    响应点击事件,点击的时候提示是当前第几章图片。从左到右,从上到下。


    点击了第一张图片,显示了1.

    步骤:

    一 新建项目,然后把图片资源复制到res/drawable/目录中,假设没有drawable这个目录也不要紧,能够直接新建这个目录。然后在Eclipse项目中刷新,就会在项目中显示出来了

    二 然后在Layout的界面xml文件activity_main.xml(当然也能够任意自己喜欢命名),输入例如以下代码:

    <?

    xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" />

    没什么特别的。就是设置好行宽,然后自己主动排好行数numColumns="auto_fit"。这个好像是Android自己主动排列的。

    三 activity_main.xml相应的java文件MainActivity.java输入逻辑代码,主要是改动onCreate这个函数就能够了,其它就默认能够了,不用管:

    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		GridView gridview = (GridView) findViewById(R.id.gridview);
    		gridview.setAdapter(new ImageAdapter(this));
    
    		gridview.setOnItemClickListener(new OnItemClickListener() {
    			public void onItemClick(AdapterView<?> parent, View v,
    					int position, long id) {
    				Toast.makeText(MainActivity.this, "" + (position+1),
    						Toast.LENGTH_SHORT).show();
    			}
    		});
    	}

    主要是设置好监听GridView对象的ItemClickListener就能够了。

    Toast能够理解为一个轻量的提示对话框,就是上图中显示1的一个小对话框,显示大概1秒多就自己主动消失。

    小技巧:

    不知道对象属于那些头文件?比如OnItemClickListener是属于什么文件库啊?

    这个有时候是个头疼的问题,尤其是使用VC写C++的时候,须要自己动手去查,头疼的是,查到了这个函数。或者类之后,竟然没提示须要include什么头文件。只是到了Java,似乎那都不是事了,一个快捷键搞定了:ctrl+shift+o;那么就会全自己主动包含全部须要的库了。


    四 之后创建一个Java类,放在MainActivity.java一个文件夹下,然后加入代码:

    package su.gridview.hellogridview;
    
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.GridView;
    import android.widget.ImageView;
    
    public class ImageAdapter extends BaseAdapter {
    	private Context mContext;
    
    	public ImageAdapter(Context c) {
    		mContext = c;
    	}
    
    	public int getCount() {
    		return mThumbIds.length;
    	}
    
    	public Object getItem(int position) {
    		return null;
    	}
    
    	public long getItemId(int position) {
    		return 0;
    	}
    
    	// create a new ImageView for each item referenced by the Adapter
    	public View getView(int position, View convertView, ViewGroup parent) {
    		ImageView imageView;
    		if (convertView == null) { // if it's not recycled, initialize some
    									// attributes
    			imageView = new ImageView(mContext);
    			imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    			imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    			imageView.setPadding(8, 8, 8, 8);
    		} else {
    			imageView = (ImageView) convertView;
    		}
    
    		imageView.setImageResource(mThumbIds[position]);
    		return imageView;
    	}
    
    	// references to our images
    	private Integer[] mThumbIds = { R.drawable.x0, R.drawable.x1,
    			R.drawable.x2, R.drawable.x3, R.drawable.x4, R.drawable.x5,
    			R.drawable.x10, R.drawable.x9, R.drawable.x8, R.drawable.x7,
    			R.drawable.x6, R.drawable.x5, R.drawable.x11, R.drawable.x20,
    			R.drawable.x13, R.drawable.x14, R.drawable.x15, R.drawable.x16,
    			R.drawable.x17, R.drawable.x18, R.drawable.x19, R.drawable.x20 };
    }
    
    本例无用的函数都是由于必须须要复写BaseAdapter类的。

    主要使用了getCount和getView这两个函数。依照他的样式实现就能够了,详细的低层工作就是由Adapter类自己主动调用的,调用getCount。Adapter就知道有多少资源对象须要显示了,调用getView就能够把图片资源显示出来,当中传入convertView是为了加速,复用之前用过的View。

    这个是我的理解,更加具体的原理还有待有空參考一下源码吧。

    參考资料:http://developer.android.com/guide/topics/ui/layout/gridview.html

    第二章完毕,感觉Android敲代码实在是太方便了,难怪Android大行其道啊,对照一个DirectX这些API的使用方法,简直就是傻瓜式的。尤其令我想起之前使用Direct2D,微软真的傻了,都什么年头了。竟然还出Direct2D这么难用的API。呵呵,别说我黑微软。近期听说VC竟然要支持Android了,感觉微软是低下了高贵的头了。支持了竞争对手的东西。同一时候也想赶上Android的步伐。不是牺牲色相啊。战略须要,是应该低下头的。


  • 相关阅读:
    Mysql:FAQ:A.5 Triggers
    Mysql:Where are stored {procedures | functions | triggers} ? (例程)存储过程、函数、触发器,存在哪儿?
    Mysql:5.7:all triggers are 【FOR EACH ROW】
    Mysql:FAQ:A.4 Stored Procedures and Functiions
    ANSI SQL 2003:美国国家标准:SQL-2003:该规范并不是free获取——你得花钱!
    Mysql:可恨又可怜Query Cache特性:已死!莫用!
    Mysql:Innodb Cluster【It's not NDB】:Based On Group Replication
    Android -- 补间动画和属性动画
    Android -- Android广播
    Android -- Android数据存储
  • 原文地址:https://www.cnblogs.com/llguanli/p/7240514.html
Copyright © 2020-2023  润新知