Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RecyclerView中多个图像上的Android动画_Android_Animation_Android Recyclerview_Android Volley - Fatal编程技术网

在RecyclerView中多个图像上的Android动画

在RecyclerView中多个图像上的Android动画,android,animation,android-recyclerview,android-volley,Android,Animation,Android Recyclerview,Android Volley,我必须下载一张图像,将其分成9等份,并在图像视图中以动画形式显示它们。 当我在活动中下载单个图像并在活动中设置动画时,我实现了这一点,但当我在回收器视图(多个项目)中执行相同操作时,图像在滚动时重复,图像的位置会改变 注意:我正在使用Volley下载图像,并在async task中执行拆分 下面是RecyclerView适配器的代码 public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{ priv

我必须下载一张
图像
将其分成9等份,并在
图像视图
中以
动画形式显示它们。
当我在<代码>活动<代码>中下载<代码>单个<代码>图像<代码>并在<代码>活动<代码>中设置动画<代码>时,我实现了这一点,但当我在<代码>回收器视图<代码>(多个项目)中执行相同操作时,<代码>图像<代码>在<代码>滚动<代码>时重复,图像的位置会改变

注意:我正在使用
Volley
下载图像,并在
async task
中执行拆分

下面是RecyclerView适配器的代码

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{

private Context mContext;
private List<ObjectClass> arrayListData;
private final TypedValue mTypedValue = new TypedValue();
private int mBackground;

public Adapter(Context mContext, List<ObjectClass> arrayListData) {
    mContext.getTheme().resolveAttribute(R.attr.selectableItemBackground,    mTypedValue, true);
    mBackground = mTypedValue.resourceId;
    this.mContext = mContext;
    this.arrayListData = arrayListData;
}

// View Holder class
    public class ViewHolder extends RecyclerView.ViewHolder {
    public final View convertView;
    NetworkImageView ivFeedImage;

    public ViewHolder(View view) {
        super(view);
        convertView = view;
        ivFeedImage = (NetworkImageView) convertView.findViewById(R.id.ivFeedImage);
    }

    @Override
    public String toString() {
        return super.toString();
    }
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.lvadapter, parent, false);
    view.setBackgroundResource(mBackground);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {

final ObjectClass data = arrayListData.get(position);

            ImageRequest imageRequest = new ImageRequest(data.getUrl(), new Response.Listener<Bitmap>() {
                @Override
                public void onResponse(Bitmap bitmap) {
                    SplitImage task = new SplitImage(); // to split image in 9 equal parts and animate it one imageView
                    task.execute(bitmap, holder.ivFeedImage);
                }
            }, 0, 0, ImageView.ScaleType.FIT_XY, Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    volleyError.printStackTrace();
                    holder.ivFeedImage.setBackgroundResource(R.mipmap.ic_launcher);
                }
            });
            AppController.getInstance().getRequestQueue().add(imageRequest);

}


@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemCount() {
    return arrayListData == null ? 0 : arrayListData.size();
}

class SplitImage extends AsyncTask<Object, Void, Void> {

    //doInBackground()
    @Override
    protected Void doInBackground(Object... params) {
        try {
            final Bitmap bitmap = (Bitmap) params[0];
            final ImageView imageView = (ImageView) params[1];
            if(bitmap != null){
                final ArrayList<Bitmap> arrImages = splitImage(bitmap); // method for splitting the image into 9 parts
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        animateImage(imageView, arrImages, 0, true); // method for applying animation to arralist of images
                    }
                });

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
} 
公共类适配器扩展了RecyclerView.Adapter{
私有上下文;
私有列表arrayListData;
私有最终类型值mTypedValue=新类型值();
私人国际mBackground;
公共适配器(上下文mContext、列表arrayListData){
mContext.getTheme().resolveAttribute(R.attr.selectableItemBackground,mTypedValue,true);
mBackground=mTypedValue.resourceId;
this.mContext=mContext;
this.arrayListData=arrayListData;
}
//视图持有者类
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公众最终意见;
网络图像视图;
公共视图持有者(视图){
超级(视图);
转换视图=视图;
ivFeedImage=(NetworkImageView)convertView.findViewById(R.id.ivFeedImage);
}
@凌驾
公共字符串toString(){
返回super.toString();
}
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.lvadapter,父级,假);
视图.setBackgroundResource(mBackground);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(最终视图持有人,最终整型位置){
最终ObjectClass数据=arrayListData.get(位置);
ImageRequest ImageRequest=新的ImageRequest(data.getUrl(),new Response.Listener()){
@凌驾
公共void onResponse(位图){
SplitImage task=new SplitImage();//将图像分成9个相等的部分,并在一个imageView中设置动画
执行(位图,holder.ivFeedImage);
}
},0,0,ImageView.ScaleType.FIT_XY,Bitmap.Config.ARGB_8888,新响应。ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
截击错误。printStackTrace();
holder.ivFeedImage.setBackgroundResource(R.mipmap.ic_启动器);
}
});
AppController.getInstance().getRequestQueue().add(imageRequest);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
public int getItemCount(){
返回arrayListData==null?0:arrayListData.size();
}
类SplitImage扩展了异步任务{
//doInBackground()
@凌驾
受保护的Void doInBackground(对象…参数){
试一试{
最终位图位图=(位图)参数[0];
最终ImageView ImageView=(ImageView)参数[1];
if(位图!=null){
final ArrayList arrImages=splitImage(位图);//将图像拆分为9个部分的方法
新的处理程序(Looper.getMainLooper()).post(新的Runnable()){
@凌驾
公开募捐{
animateImage(imageView,arrImages,0,true);//将动画应用于图像列表的方法
}
});
}
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}
} 

您可以发布一些您正在使用的代码吗?您可能需要在模型内部设置一些标志,并在您的视窗夹中设置if条件,以指示图像是否已设置动画。@JakubSzczygieł请检查编辑。谢谢