android - picasso 无法在@override 上加载动画

标签 android animation imageview baseadapter picasso

好的,我已经覆盖了 Picassos 方法,我的逻辑如下。在适配器中,我有一个布局,我的图像将被下载,但在此之前,我在整个屏幕上有一个 FrameLayout 来存储我的动画可绘制对象。接下来是我的代码:

@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;
    }

和我的 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>

问题是在方法 onBitmapLoaded 之后动画没有被隐藏,当我向下滚动 gridView 并将其拉回来时它被隐藏,然后它就消失了。有什么建议吗?

最佳答案

错误的逻辑。这是代码:

@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>

关于android - picasso 无法在@override 上加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32253654/

相关文章:

android - 在 Fragment 上显示来自 url 的图像

javascript - android 上的酱错误 "Selenium::WebDriver::Error::UnsupportedOperationError: underlying webdriver instance does not support javascript"

android - 我什么时候应该在另一个线程(不是主线程)上执行某些 SQLite 操作?

android - 验证存储的 Firebase FCM token

CSS 从文本中移动一个字母

android - 使用 URL 设置 ImageView

css - 悬停时Imageview图像发生变化,Javafx

android - 是否可以访问和更新 Exchange 帐户?

javascript - 如何保持动画 CSS 的最终状态并删除动画属性?

CSS背景动画