Android实现GridView中ImageView动态变换的方法
本文实例讲述了Android实现GridView中ImageView动态变换的方法。分享给大家供大家参考。具体如下:
使用YY影音的时候,发现点击GridView的某一个Item,Item里面的图标会在按下的时候发生变换,变成另外一个图片。
自己写了一个类似的demo,具体步骤如下:
1、创建一个包含Grid的Acitity
2、创建item.xml里面包含一个imageview和一个textview
3、自定义一个adapter,从baseadapter继承
4、在getView中为每个imageView添加setOnTouchListener
代码入下:
MainActivity.java
packagecom.mygriddemo;
importjava.util.ArrayList;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.res.Resources;
importandroid.graphics.drawable.Drawable;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.LayoutInflater;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.View.OnTouchListener;
importandroid.view.ViewGroup;
importandroid.widget.AdapterView;
importandroid.widget.AdapterView.OnItemClickListener;
importandroid.widget.BaseAdapter;
importandroid.widget.GridView;
importandroid.widget.ImageButton;
importandroid.widget.ImageView;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassMainActivityextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
privateGridViewgv;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gv=(GridView)findViewById(R.id.mygrid);
AddAdapteraddadapter=newAddAdapter(this);
gv.setAdapter(addadapter);
}
publicclassAddAdapterextendsBaseAdapter{
privatefinalLayoutInflatermInflater;
privatefinalArrayList<ListItem>mItems=newArrayList<ListItem>();
//publicstaticfinalintITEM_SHORTCUT=0;
//publicstaticfinalintITEM_APPWIDGET=1;
//publicstaticfinalintITEM_LIVE_FOLDER=2;
//publicstaticfinalintITEM_WALLPAPER=3;
/**
*Specificiteminourlist.
*/
publicclassListItem{
publicfinalCharSequencetext;
publicfinalDrawableimage;
//publicfinalintactionTag;
publicfinalDrawabletouchimage;
//,intactionTag
publicListItem(Resourcesres,inttextResourceId,intimageResourceId,inttouchImageResourceId){
text=res.getString(textResourceId);
if(imageResourceId!=-1){
image=res.getDrawable(imageResourceId);
}else{
image=null;
}
if(touchImageResourceId!=-1){
touchimage=res.getDrawable(touchImageResourceId);
}else{
touchimage=null;
}
}
}
publicAddAdapter(MainActivitylauncher){
super();
mInflater=(LayoutInflater)launcher.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//Createdefaultactions
Resourcesres=launcher.getResources();
mItems.add(newListItem(res,R.string.item1,
R.drawable.item1,R.drawable.item1back));
mItems.add(newListItem(res,R.string.item2,
R.drawable.item2,R.drawable.item2back));
mItems.add(newListItem(res,R.string.item3,
R.drawable.item3,R.drawable.item3back));
mItems.add(newListItem(res,R.string.item4,
R.drawable.item4,R.drawable.item4back));
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
finalListItemitem=(ListItem)getItem(position);
if(convertView==null){
convertView=mInflater.inflate(R.layout.grid_item,parent,false);
}
finalTextViewtextView=(TextView)convertView;//.findViewById(R.id.mygrid);
textView.setTag(item);
textView.setText(item.text);
textView.setCompoundDrawablesWithIntrinsicBounds(null,item.image,null,null);
textView.setOnTouchListener(newOnTouchListener(){
publicbooleanonTouch(Viewarg0,MotionEventarg1){
//TODOAuto-generatedmethodstub
if(arg1.getAction()==MotionEvent.ACTION_DOWN){
Log.d("WeatherWidget",MotionEvent.ACTION_DOWN+"");
textView.setCompoundDrawablesWithIntrinsicBounds(null,item.touchimage,null,null);
}
elseif(arg1.getAction()==MotionEvent.ACTION_UP){
Log.d("WeatherWidget",arg1.getAction()+"");
textView.setCompoundDrawablesWithIntrinsicBounds(null,item.image,null,null);
Intenti=newIntent(MainActivity.this,Page1Activity.class);
startActivity(i);
}
returntrue;
}
});
returnconvertView;
}
publicintgetCount(){
returnmItems.size();
}
publicObjectgetItem(intposition){
returnmItems.get(position);
}
publiclonggetItemId(intposition){
returnposition;
}
}
}
main.xml代码:
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridViewandroid:id="@+id/mygrid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="2" android:verticalSpacing="10dip" android:horizontalSpacing="10dip" android:stretchMode="columnWidth" android:gravity="center" > </GridView> </LinearLayout>
griditem.xml代码:
<?xmlversion="1.0"encoding="utf-8"?> <?xmlversion="1.0"encoding="utf-8"?> <TextViewxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:minHeight="?android:attr/listPreferredItemHeight" android:layout_centerHorizontal="true" android:drawablePadding="14dip" android:paddingLeft="15dip" android:paddingRight="15dip" android:gravity="center_horizontal" />
希望本文所述对大家的Android程序设计有所帮助。