为了弄GridView中Item的放大缩小,弄了好久,纠结了好久,也找了好多资料,终于弄出来了。
一、效果图如下:
二、GridView实现九宫格比较容易,难的是实现动画放大和放大后不会被后面的Item覆盖的问题,有人说用View.Bringtofornt()可以解决,不过我试了好久都不行,可能我的方法不对,有高手使用View.Bringtofornt()实现成功的可以交流一下。我用的是另一种方法:继承GridView,实现protected int getChildDrawingOrder(int childCount, int i)方法。代码如下:MyGridView.java
- package com.src;
- import android.annotation.SuppressLint;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.widget.GridView;
- public class MyGridView extends GridView {
- private int position = 0;
- public MyGridView(Context context) {
- super(context);
- }
- public MyGridView(Context context, AttributeSet attrs) {
- super(context, attrs);
- setChildrenDrawingOrderEnabled(true);
- }
- public void setCurrentPosition(int pos) {
- // 刷新adapter前,在activity中调用这句传入当前选中的item在屏幕中的次序
- this.position = pos;
- }
- @SuppressLint("NewApi")
- @Override
- protected void setChildrenDrawingOrderEnabled(boolean enabled) {
- // TODO Auto-generated method stub
- super.setChildrenDrawingOrderEnabled(enabled);
- }
- @Override
- protected int getChildDrawingOrder(int childCount, int i) {
- if (i == childCount - 1) { // 这是最后一个需要刷新的item
- return position;
- }
- if (i == position) { // 这是原本要在最后一个刷新的item
- return childCount - 1;
- }
- return i;// 正常次序的item
- }
- }
- <?xml version="1.0" encoding="utf-8"?>