Android UI 设计(14):GridView 控件
来源:互联网 发布:网络捕鱼赌博被破案件 编辑:程序博客网 时间:2024/05/16 03:01
GridView
GridView的用法与ListView的用法相同,都需要使用Adapter适配器。GridView与ListView控件唯一的不同便是显示形式不同,GridView是以行*列的形式展现的,使多条数据在一行。我们手机上的相册一个很好的例子。
GridView的使用步骤:
(在下面这个例子中,添加了一个小功能:这个功能在我们平常发送图片的时候会看到,就是当我们点击选择框选择图片时,图片会变白半透明,也就是添加了一层蒙版。这里我们也实现一下这个小功能。)
首先在Activity的布局文件中添加一个GridView。注意一个属性:”numCulumns“,定义列数。
<RelativeLayoutxmlns: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=".MainActivity">
<GridView
android:id="@+id/gridview_fruit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="3">
</GridView>
</RelativeLayout>
结果:
M, 即Model。创建数据,这里还是以水果为例。
publicclassFruit{
privatebooleanmCheckBoxchecked;
privateintmImage;
privateStringmFruitName;
privateintmImageTint;
publicintgetmImageTint(){
returnmImageTint;
}
publicvoidsetmImageTint(intmImageTint){
this.mImageTint=mImageTint;
}
publicFruit(intmImage,StringmFruitName){
this.mImage=mImage;
this.mFruitName=mFruitName;
}
publicbooleanismCheckBoxchecked(){
returnmCheckBoxchecked;
}
publicvoidsetmCheckBoxchecked(booleanmCheckBoxchecked){
this.mCheckBoxchecked=mCheckBoxchecked;
}
publicintgetmImage(){
returnmImage;
}
publicvoidsetmImage(intmImage){
this.mImage=mImage;
}
publicStringgetmFruitName(){
returnmFruitName;
}
publicvoidsetmFruitName(StringmFruitName){
this.mFruitName=mFruitName;
}
}
V, 即View。创建一个View,每个水果的显示形式
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageview_fruit"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="15dp"
android:src="@mipmap/apple" />
<TextView
android:id="@+id/textview_fruit_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/imageview_fruit"
android:gravity="center"
android:text="名称" />
<ImageView
android:id="@+id/imageview_tint"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/textview_fruit_name"
android:layout_alignRight="@+id/textview_fruit_name"
android:layout_alignTop="@+id/checkbox_picture_checked"
android:background="@color/tint"
android:visibility="invisible" />
<CheckBox
android:id="@+id/checkbox_picture_checked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:focusable="false" />
</RelativeLayout>
创建一个Adapter。将数据添加到View中。
publicclassMyGridAdapterextendsBaseAdapter{
privateList<Fruit>mFruits;
privateLayoutInflater mInfalter;
privateViewHolder viewHolder;
//定义一个CheckBox的管理器。
privateboolean[]mManagerCheckBox;
privateint[]mImageViewTint={View.INVISIBLE};
/*
生成构造器
*/
publicMyGridAdapter(List<Fruit>mFruits,LayoutInflater mInfalter){
this.mFruits=mFruits;
this.mInfalter=mInfalter;
mManagerCheckBox=newboolean[mFruits.size()];
}
@Override
publicintgetCount(){
returnmFruits.size();
}
@Override
publicObjectgetItem(intposition){
returnposition;
}
@Override
publiclonggetItemId(intposition){
returnposition;
}
@Override
publicView getView(finalintposition,View convertView,ViewGroup viewGroup){
if(convertView==null){
convertView=mInfalter.inflate(R.layout.item_fruits,null);
viewHolder=newViewHolder();
viewHolder.imageViewFruit=(ImageView)convertView.findViewById(R.id.imageview_fruit);
viewHolder.textViewFruitName=(TextView)convertView.findViewById(R.id.textview_fruit_name);
viewHolder.checkBox=(CheckBox)convertView.findViewById(R.id.checkbox_picture_checked);
viewHolder.imageViewTint=(ImageView)convertView.findViewById(R.id.imageview_tint);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder)convertView.getTag();
}
Fruit fruit=mFruits.get(position);
viewHolder.imageViewFruit.setImageResource(fruit.getmImage());
viewHolder.textViewFruitName.setText(fruit.getmFruitName());
viewHolder.imageViewTint.setImageResource(fruit.getmImageTint());
viewHolder.checkBox.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener(){
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
publicvoidonCheckedChanged(CompoundButton compoundButton,booleanisChecked){
mManagerCheckBox[position]=isChecked;
notifyDataSetChanged();
}
});
viewHolder.checkBox.setChecked(mManagerCheckBox[position]);
//设置蒙版
if(mManagerCheckBox[position]==true){
Log.d("data",""+position+"设置蒙版 ");
viewHolder.imageViewTint.setVisibility(View.VISIBLE);
Log.d("data",""+viewHolder.imageViewTint.getId());
}else{
viewHolder.imageViewTint.setVisibility(View.INVISIBLE);
}
returnconvertView;
}
/*
创建ViewHolder的内部类
*/
classViewHolder{
CheckBox checkBox;
ImageView imageViewTint;
ImageView imageViewFruit;
TextView textViewFruitName;
}
}
C,即Control。在Activity中调用自定义的Adapter,将View添加到GridView的每一个Item中。(最近真的是用Adapter用吐了哇,可是还是有很多不会的,嘤嘤,,纠结 ~@@~ 纠结……)
publicclassMainActivityextendsActivity{
privateGridView mGridView;
privateList<Fruit>mFruits;
privateLayoutInflater mInflater;
privateMyGridAdapter mMyGridAdapter;
@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGridView=(GridView)findViewById(R.id.gridview_fruit);
mInflater=getLayoutInflater();
//调用数据初始化方法。
initData();
mMyGridAdapter=newMyGridAdapter(mFruits,mInflater);
mGridView.setAdapter(mMyGridAdapter);
}
//数据初始化啦……
privatevoidinitData(){
mFruits=newArrayList<Fruit>();
for(inti=0;i<10;i++){
Fruit apple=newFruit(R.mipmap.apple,"苹果");
mFruits.add(apple);
Fruit banana=newFruit(R.mipmap.banana,"香蕉");
mFruits.add(banana);
Fruit grape=newFruit(R.mipmap.grape,"葡萄");
mFruits.add(grape);
Fruit watermelon=newFruit(R.mipmap.watermelon,"西瓜");
mFruits.add(watermelon);
Fruit pineapple=newFruit(R.mipmap.pineapple,"菠萝");
mFruits.add(pineapple);
}
}
}
结果:
总体效果:
- Android UI 设计(14):GridView 控件
- Android UI设计——GridView控件
- Android UI设计——GridView控件
- Android UI设计:GridView
- Android UI控件详解-GridView(网格视图)
- Android UI系统控件进阶(四)—网格视图控件GridView
- 【Android 开发】:UI控件之 GridView 网格控件的使用
- UI控件--GridView
- GridView UI设计
- Android UI设计 时间控件TimePicker用法(含取值)
- Android UI 设计:ListView控件和ArrayAdapter适配器(二)
- 自定义控件实战-Android UI模板设计(文末小彩蛋)
- Android UI设计 评分控件RatingBar用法
- Android系统UI设计之:Widget控件
- Android UI设计——TextView控件
- Android UI设计——Button控件
- Android UI设计——EditText控件
- Android UI设计——Spinner控件
- Android文件命名规范
- (从头做DP)HDU 1003 Max Sum
- 过程能力指数Cp与Cpk计算公式
- 练习一 使用QImage显示RGB图像和灰度图像
- 80x86保护模式(2)
- Android UI 设计(14):GridView 控件
- c++学习笔记(一):c++构造函数
- java jxl 导出Excel
- u-boot 学习记录(二): u-boot源码目录介绍
- 合并字符串
- C++11 std::bind的用法(转)
- CSS 双斜线注解语法
- android 网络编程
- QT【绘图】 QPaintDevice 总结:QPixmap、QImage、QBitmap和QPicture