Search code examples
androidanimationimageviewbaseadapterpicasso

Picasso unable to load animation on @override


Ok, I have overridden Picassos methods, my logic is as following. In adapter, I have a layout where my image will be downloaded, but, before that, I have a FrameLayout on the whole screen to store my animation drawable. My code is next:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final holder mHolder;


        if (convertView == null) {
            mHolder = new holder();


            convertView = mInflater.inflate(R.layout.adapter_prodavci, parent, false);
            mHolder.slika = (ImageView) convertView.findViewById(R.id.ImageViewProdavciMain);
            mHolder.loading = (ImageView) convertView.findViewById(R.id.loadingImageAdapterProdavci);
            mHolder.frame = (FrameLayout) convertView.findViewById(R.id.frameAdapterProdavci);
            convertView.setTag(mHolder);
        } else {
            mHolder = (holder) convertView.getTag();
        }
        final Animation myAnim = AnimationUtils.loadAnimation(mContext.getApplicationContext(), R.anim.rotator);
        Prodavci prodavci = getItem(position);
        Picasso.with(mContext)
                .load(prodavci.getSlika())
                .into(new Target() {
                    @Override
                    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
//                        myAnim.cancel();
//                        myAnim.reset();
                        mHolder.loading.clearAnimation();
                        mHolder.loading.setVisibility(View.GONE);
                        mHolder.loading.invalidate();
                        mHolder.frame.setVisibility(View.GONE);
                        mHolder.frame.invalidate();
                        mHolder.slika.setVisibility(View.VISIBLE);
                        mHolder.slika.setImageBitmap(bitmap);
                        mHolder.slika.bringToFront();
                        mHolder.slika.invalidate();
                    }

                    @Override
                    public void onBitmapFailed(Drawable errorDrawable) {

                    }

                    @Override
                    public void onPrepareLoad(Drawable placeHolderDrawable) {
                        mHolder.loading.startAnimation(myAnim);
                    }
                });

        return convertView;
    }

and my XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_margin="11.333dp"
        android:layout_marginLeft="11.33dp"
        android:layout_marginRight="11.33dp"
        android:layout_marginTop="11.33dp"
        android:background="@drawable/okvirlogo">


        <aik.akcijeikatalozi.objetki.SquareImageView
            android:id="@+id/ImageViewProdavciMain"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_margin="3dp"
            android:background="@android:color/transparent"
            android:scaleType="center" />


    </LinearLayout>


    <FrameLayout
        android:id="@+id/frameAdapterProdavci"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:background="#ffffff">


        <ImageView
            android:id="@+id/loadingImageAdapterProdavci"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_horizontal|center_vertical"
            android:background="@android:color/transparent"
            android:src="@drawable/loadingwheels" />


    </FrameLayout>

</RelativeLayout>

The problem is that animation is not being hidden after the method onBitmapLoaded, it is hidden when I scroll down the gridView, and pull it back up, then its gone. Any suggestions?


Solution

  • Wrong logic. Here is the code:

    @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            final holder mHolder;
    
    
            if (convertView == null) {
                mHolder = new holder();
    
    
                convertView = mInflater.inflate(R.layout.adapter_prodavci, parent, false);
                mHolder.slika = (ImageView) convertView.findViewById(R.id.ImageViewProdavciMain);
                convertView.setTag(mHolder);
            } else {
                mHolder = (holder) convertView.getTag();
            }
    
            Prodavci prodavci = getItem(position);
    
    
    
            Picasso.with(mContext)
                    .load(prodavci.getSlika())
                    .into(new Target() {
                        @Override
                        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                            mHolder.slika.clearAnimation();
                            mHolder.slika.setImageBitmap(bitmap);
                        }
    
                        @Override
                        public void onBitmapFailed(Drawable errorDrawable) {
    
                        }
    
                        @Override
                        public void onPrepareLoad(Drawable placeHolderDrawable) {
                            Animation myAnim = AnimationUtils.loadAnimation(mContext.getApplicationContext(), R.anim.rotator);
                            placeHolderDrawable = mContext.getResources().getDrawable(R.drawable.loadingwheels);
                            mHolder.slika.setImageDrawable(placeHolderDrawable);
                            mHolder.slika.startAnimation(myAnim);
                        }
                    });
    
            return convertView;
        }
    

    XML

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_margin="11.333dp"
            android:layout_marginLeft="11.33dp"
            android:layout_marginRight="11.33dp"
            android:layout_marginTop="11.33dp"
            android:background="@drawable/okvirlogo">
    
    
            <aik.akcijeikatalozi.objetki.SquareImageView
                android:id="@+id/ImageViewProdavciMain"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:layout_margin="11.333dp"
                android:layout_marginLeft="11.33dp"
                android:layout_marginRight="11.33dp"
                android:layout_marginTop="11.33dp"
                android:background="@android:color/transparent" />
    
    
        </LinearLayout>
    
    
    </RelativeLayout>