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程序设计有所帮助。