关于gridview多item选中放大问题。

在前几天开发中遇到一个问题,就是要求选中放大gridview的item。然后就开始重写gridview ,发现按照一般的做法会发现空指针异常的现象。以下是我一开始做的方法:

 @Override
    protected int getChildDrawingOrder(int childCount, int i) {
        if (position != -1) {
            if (i == childCount - 1)
                return position;
            if (i == position){
                return childCount - 1;

           }
        }
        return i;
        
    }

重写gridview,的绘制顺序,把选中的item和最后一个绘制的item调换一下顺序。
public void setScaleAnimation(View view,int position) {
		AnimationSet animationSet = new AnimationSet(true);
		if (manimationSet != null && manimationSet != animationSet) {
			manimationSet.setFillAfter(false);
			manimationSet.cancel();
		}
		ScaleAnimation scaleAnimation;
		if (position % 4 == 3){
			scaleAnimation = new ScaleAnimation(1.0f, 1.1f, 1.0f, 1.1f, 1, 1f, 1, 0.5f);
		}else {
		scaleAnimation = new ScaleAnimation(1.0f, 1.1f, 1.0f, 1.1f, 1, 0.5f, 1, 0.5f);
		}
		scaleAnimation.setDuration(500);
		animationSet.addAnimation(scaleAnimation);
		animationSet.setFillAfter(true);
		view.startAnimation(animationSet);
		manimationSet = animationSet;
	}

上面是放大动画,最基础的动画。

当item多的时候会报错,因为position一直增加,而childcount是可见的数目,当所有的item都是可见的时候将不会出错。所有要修改一下代码。修改为以上的代码就不出错了

@Override
	protected int getChildDrawingOrder(int childCount, int i) {
		// return super.getChildDrawingOrder(childCount, i);

		if (this.getSelectedItemPosition() != -1) {
			if (i + this.getFirstVisiblePosition() == this.getSelectedItemPosition()) {// 这是原本要在最后一个刷新的item
				return childCount - 1;
			}
			if (i == childCount - 1) {// 这是最后一个需要刷新的item
				return this.getSelectedItemPosition() - this.getFirstVisiblePosition();
			}
		}
		return i;
	}

以上的代码就是兼顾可见可不见的条目,这时候就适配左右的不管多或少的item报空指针异常问题。

以上是我遇见并解决的问题,欢迎大家交流。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值