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 package com.mygriddemo; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { /** Called when the activity is first created. */ private GridView gv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gv = (GridView) findViewById(R.id.mygrid); AddAdapter addadapter = new AddAdapter(this); gv.setAdapter(addadapter); } public class AddAdapter extends BaseAdapter { private final LayoutInflater mInflater; private final ArrayList<ListItem> mItems = new ArrayList<ListItem>(); // public static final int ITEM_SHORTCUT = 0; // public static final int ITEM_APPWIDGET = 1; // public static final int ITEM_LIVE_FOLDER = 2; // public static final int ITEM_WALLPAPER = 3; /** * Specific item in our list. */ public class ListItem { public final CharSequence text; public final Drawable image; //public final int actionTag; public final Drawable touchimage; //, int actionTag public ListItem(Resources res, int textResourceId, int imageResourceId,int touchImageResourceId) { text = res.getString(textResourceId); if (imageResourceId != -1) { image = res.getDrawable(imageResourceId); } else { image = null; } if (touchImageResourceId != -1) { touchimage = res.getDrawable(touchImageResourceId); } else { touchimage = null; } } } public AddAdapter(MainActivity launcher) { super(); mInflater = (LayoutInflater) launcher.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // Create default actions Resources res = launcher.getResources(); mItems.add(new ListItem(res, R.string.item1, R.drawable.item1, R.drawable.item1back)); mItems.add(new ListItem(res, R.string.item2, R.drawable.item2, R.drawable.item2back)); mItems.add(new ListItem(res, R.string.item3, R.drawable.item3, R.drawable.item3back)); mItems.add(new ListItem(res, R.string.item4, R.drawable.item4, R.drawable.item4back)); } public View getView(int position, View convertView, ViewGroup parent) { final ListItem item = (ListItem) getItem(position); if (convertView == null) { convertView = mInflater.inflate(R.layout.grid_item, parent, false); } final TextView textView = (TextView) convertView;//.findViewById(R.id.mygrid); textView.setTag(item); textView.setText(item.text); textView.setCompoundDrawablesWithIntrinsicBounds(null, item.image, null, null); textView.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub if (arg1.getAction() == MotionEvent.ACTION_DOWN){ Log.d("WeatherWidget", MotionEvent.ACTION_DOWN+""); textView.setCompoundDrawablesWithIntrinsicBounds(null, item.touchimage, null, null); } else if(arg1.getAction() == MotionEvent.ACTION_UP) { Log.d("WeatherWidget", arg1.getAction()+""); textView.setCompoundDrawablesWithIntrinsicBounds(null, item.image, null, null); Intent i = new Intent(MainActivity.this,Page1Activity.class); startActivity(i); } return true; } }); return convertView; } public int getCount() { return mItems.size(); } public Object getItem(int position) { return mItems.get(position); } public long getItemId(int position) { return position; } } }
main.xml代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridView android: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代码:
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?> <TextView xmlns: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程序设计有所帮助。
- 详解Android使GridView横向水平滚动的实现方式
- Android开发基于ViewPager+GridView实现仿大众点评横向滑动功能
- Android中实现多行、水平滚动的分页的Gridview实例源码
- android ListView和GridView拖拽移位实现代码
- Android GridView实现滚动到指定位置的方法
- android中GridView的用法示例
- android GridView多选效果的实例代码
- Android开发之使用GridView展示图片的方法
- Android开发学习笔记 Gallery和GridView浅析
- Android GridView仿微信朋友圈显示图片
- Android实现九宫格(GridView中各项平分空间)的方法
- Android开发实现横向列表GridView横向滚动的方法【附源码下载】
相关文章
SafeList in Flutter and Dart小技巧
这篇文章主要为大家介绍了SafeList in Flutter and Dart小技巧,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-12-12Android使用开源组件PagerBottomTabStrip实现底部菜单和顶部导航功能
这篇文章主要介绍了Android使用PagerBottomTabStrip实现底部菜单和顶部导航功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2018-08-08Android垂直切换的圆角Banner与垂直指示器相关介绍与应用详解
这篇文章主要介绍了Android垂直切换的圆角Banner与垂直指示器相关介绍与应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧2022-10-10Android通过aapt命令获取apk详细信息(包括:文件包名,版本号,SDK等信息)
本文给大家分享android通过aapt命令获取apk详细信息(包括:文件包名,版本号,SDK等信息),非常不错,简单实用,对android sdk aapt知识感兴趣的朋友一起通过本文学习吧2016-11-11android RecyclerView实现条目Item拖拽排序与滑动删除
本篇文章主要介绍了android RecyclerView实现条目Item拖拽排序与滑动删除,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-03-03使用Win10+Android+夜神安卓模拟器,搭建ReactNative开发环境
今天小编就为大家分享一篇关于使用Win10+Android+夜神安卓模拟器,搭建ReactNative开发环境,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-10-10Android中利用matrix 控制图片的旋转、缩放、移动
本篇文章是对Android中利用matrix 控制图片的旋转、缩放、移动进行了详细的分析介绍,需要的朋友参考下2013-06-06
最新评论