首页 > 系统 > Android > 正文

Android实现GridView中ImageView动态变换的方法

2019-10-24 20:36:02
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Android实现GridView中ImageView动态变换的方法,以实例形式较为详细的分析了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

代码入下:

 

 
  1. MainActivity.java 
  2. package com.mygriddemo; 
  3. import java.util.ArrayList; 
  4. import android.app.Activity; 
  5. import android.content.Context; 
  6. import android.content.Intent; 
  7. import android.content.res.Resources; 
  8. import android.graphics.drawable.Drawable; 
  9. import android.os.Bundle; 
  10. import android.util.Log; 
  11. import android.view.LayoutInflater; 
  12. import android.view.MotionEvent; 
  13. import android.view.View; 
  14. import android.view.View.OnTouchListener; 
  15. import android.view.ViewGroup; 
  16. import android.widget.AdapterView; 
  17. import android.widget.AdapterView.OnItemClickListener; 
  18. import android.widget.BaseAdapter; 
  19. import android.widget.GridView; 
  20. import android.widget.ImageButton; 
  21. import android.widget.ImageView; 
  22. import android.widget.TextView; 
  23. import android.widget.Toast; 
  24. public class MainActivity extends Activity { 
  25. /** Called when the activity is first created. */ 
  26. private GridView gv; 
  27. @Override 
  28. public void onCreate(Bundle savedInstanceState) { 
  29. super.onCreate(savedInstanceState); 
  30. setContentView(R.layout.main); 
  31. gv = (GridView) findViewById(R.id.mygrid);  
  32. AddAdapter addadapter = new AddAdapter(this); 
  33. gv.setAdapter(addadapter); 
  34. public class AddAdapter extends BaseAdapter { 
  35. private final LayoutInflater mInflater; 
  36. private final ArrayList<ListItem> mItems = new ArrayList<ListItem>(); 
  37. // public static final int ITEM_SHORTCUT = 0; 
  38. // public static final int ITEM_APPWIDGET = 1; 
  39. // public static final int ITEM_LIVE_FOLDER = 2; 
  40. // public static final int ITEM_WALLPAPER = 3; 
  41. /** 
  42. * Specific item in our list. 
  43. */ 
  44. public class ListItem { 
  45. public final CharSequence text; 
  46. public final Drawable image; 
  47. //public final int actionTag; 
  48. public final Drawable touchimage; 
  49. //, int actionTag 
  50. public ListItem(Resources res, int textResourceId, int imageResourceId,int touchImageResourceId) { 
  51. text = res.getString(textResourceId); 
  52. if (imageResourceId != -1) { 
  53. image = res.getDrawable(imageResourceId); 
  54. else { 
  55. image = null
  56. if (touchImageResourceId != -1) { 
  57. touchimage = res.getDrawable(touchImageResourceId); 
  58. else { 
  59. touchimage = null
  60. public AddAdapter(MainActivity launcher) { 
  61. super(); 
  62. mInflater = (LayoutInflater) launcher.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  63. // Create default actions 
  64. Resources res = launcher.getResources(); 
  65. mItems.add(new ListItem(res, R.string.item1, 
  66. R.drawable.item1, R.drawable.item1back)); 
  67. mItems.add(new ListItem(res, R.string.item2, 
  68. R.drawable.item2, R.drawable.item2back)); 
  69. mItems.add(new ListItem(res, R.string.item3, 
  70. R.drawable.item3, R.drawable.item3back)); 
  71. mItems.add(new ListItem(res, R.string.item4, 
  72. R.drawable.item4, R.drawable.item4back)); 
  73. public View getView(int position, View convertView, ViewGroup parent) { 
  74. final ListItem item = (ListItem) getItem(position); 
  75. if (convertView == null) { 
  76. convertView = mInflater.inflate(R.layout.grid_item, parent, false); 
  77. final TextView textView = (TextView) convertView;//.findViewById(R.id.mygrid); 
  78. textView.setTag(item); 
  79. textView.setText(item.text); 
  80. textView.setCompoundDrawablesWithIntrinsicBounds(null, item.image, nullnull); 
  81. textView.setOnTouchListener(new OnTouchListener(){ 
  82. public boolean onTouch(View arg0, MotionEvent arg1) { 
  83. // TODO Auto-generated method stub 
  84. if (arg1.getAction() == MotionEvent.ACTION_DOWN){ 
  85. Log.d("WeatherWidget", MotionEvent.ACTION_DOWN+""); 
  86. textView.setCompoundDrawablesWithIntrinsicBounds(null, item.touchimage, nullnull); 
  87. else if(arg1.getAction() == MotionEvent.ACTION_UP) { 
  88. Log.d("WeatherWidget", arg1.getAction()+""); 
  89. textView.setCompoundDrawablesWithIntrinsicBounds(null, item.image, nullnull); 
  90. Intent i = new Intent(MainActivity.this,Page1Activity.class); 
  91. startActivity(i); 
  92. return true
  93. }); 
  94. return convertView; 
  95. public int getCount() { 
  96. return mItems.size(); 
  97. public Object getItem(int position) { 
  98. return mItems.get(position); 
  99. public long getItemId(int position) { 
  100. return position; 

main.xml代码:

 

 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3. android:orientation="vertical" 
  4. android:layout_width="fill_parent" 
  5. android:layout_height="fill_parent" 
  6. <GridView android:id="@+id/mygrid" 
  7. android:layout_width="fill_parent" 
  8. android:layout_height="fill_parent" 
  9. android:numColumns="2" 
  10. android:verticalSpacing="10dip" 
  11. android:horizontalSpacing="10dip" 
  12. android:stretchMode="columnWidth" 
  13. android:gravity="center" 
  14. </GridView> 
  15. </LinearLayout> 

griditem.xml代码:

 

 
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <?xml version="1.0" encoding="utf-8"?> 
  3. <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
  4. android:layout_width="wrap_content" 
  5. android:layout_height="wrap_content" 
  6. android:minHeight="?android:attr/listPreferredItemHeight" 
  7. android:layout_centerHorizontal="true" 
  8. android:drawablePadding="14dip" 
  9. android:paddingLeft="15dip" 
  10. android:paddingRight="15dip" 
  11. android:gravity="center_horizontal" 
  12. /> 

希望本文所述对大家的Android程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表