android gridview 动画效果,android 实现GridView动态布局多选效果

a4c26d1e5885305701be709a3d33442f.png

如果我们想实现上面的效果该怎么办呢?

首先想到的GridView布局,然后是重写Adapter适配器,并添加点击效果,改变每个Item的状态。因为显示的Item是应用的图标,需要获取应用图标并实时的更新,这里的关键在于Adapter的重写。

1. GridView布局

android:id="@+id/app_deleted_gridview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="155dp"

android:layout_marginRight="166dp"

android:layout_marginTop="10dp"

android:numColumns="auto_fit"

android:gravity="center"

android:horizontalSpacing="3dp"

android:verticalSpacing="20dp"

android:listSelector="#00000000"

android:stretchMode="columnWidth"

android:columnWidth="160dp"

/>

2. 单项Item效果

http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="wrap_content"

android:layout_height="@dimen/item_height"

android:background="@drawable/icon_seleted_style"

android:gravity="center"

android:orientation="vertical" >

android:id="@+id/checked_status"

android:src="@drawable/checked_circle"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="right|top"

android:layout_marginRight="6dp"

android:layout_marginTop="-6dp"

android:visibility="invisible"/>

android:id="@+id/list_image"

android:layout_width="@dimen/icon_width"

android:layout_height="@dimen/icon_height"

android:layout_marginTop="-6dp"

/>

android:id="@+id/list_content"

android:layout_marginTop="11dp"

android:layout_marginBottom="8dp"

android:textSize="16sp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

3. 重写Adapter,继承BaseAdapter,其中关键的函数是重写getView。

其中在新建Adapter时将要写显示的List数据传入,这样可以在getView时加载数据,我传入的是我自己的一个List,这个list中包含APK应用的信息。

public class AppShowAdapter extends BaseAdapter {

public void setShowFlag(int position,boolean showFlag) {

this.showFlag = showFlag;

ItemStatus cacheStatus = new

ItemStatus();

cacheStatus.appName =

listAppInfos.get(position).getAppName();

cacheStatus.show =

showFlag;

itemStatus.set(position,

cacheStatus);

System.out.println("//更新GridView界面");

notifyDataSetChanged();//更新GridView界面

}

@Override

public View getView(int position, View

convertView, ViewGroup parent) {

// TODO Auto-generated method

stub

System.out.println("status==:"+showFlag+"position==="+position);

AppInfo info =

listAppInfos.get(position);

View view =

View.inflate(context, R.layout.list_view_style, null);

AppManagerViews views = new

AppManagerViews(); views.iv_app_icon = (ImageView)

view.findViewById(R.id.list_image);

views.tv_app_name = (TextView)

view.findViewById(R.id.list_content); ImageView checkImage =

(ImageView)view.findViewById(R.id.checked_status);

//选中效果

if(itemStatus.get(position).show==true){

checkImage.setVisibility(View.VISIBLE);

}else{

checkImage.setVisibility(View.INVISIBLE);

}

views.tv_app_name.setText(info.getAppName()+" "+ getAppSize(info)); views.iv_app_icon.setImageDrawable(info.getIcon());

view.setTag(views);

return view;

}

private class AppManagerViews { ImageView iv_app_icon; TextView

tv_app_name; }

4 Activity 新建Adapter实现效果,并添加单击效果

final AppShowAdapter appShowAdapter = new

AppShowAdapter(UninstallActivity.this, listAppInfos);

GridView appGridView =

(GridView)this.findViewById(R.id.app_deleted_gridview);

appGridView.setAdapter(appShowAdapter);

appGridView.setOnItemClickListener(new

OnItemClickListener() {

public void onItemClick(AdapterView

{

//

TODO Auto-generated method stub

//System.out.println("name="+listAppInfos.get(arg2).getPackageName()+"positions"+arg2);

Uri

packageURI =

Uri.parse("package:"+listAppInfos.get(arg2).getPackageName()); uninstallAppName.add(packageURI);

Intent

uninstallIntent = new Intent(Intent.ACTION_DELETE,

packageURI); //startActivity(uninstallIntent);

if(appShowAdapter.getItemStatus(arg2)==true){

System.out.println("name=======true");

appShowAdapter.setShowFlag(arg2,false);

}else{

appShowAdapter.setShowFlag(arg2,true);

}

}

});

上面的代码就实现了如图所示的效果,我想阐述的是一个思路,细节可以自己去实现,因为不同的程序会有许多不一样的地方,其他人的程序可以借鉴,借鉴思路是什么,细节的地方自己完善。上面的代码还存在的一个问题就是当删除应用之后不能刷新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值