Search code examples
androidandroid-recyclerviewpicasso

RecyclerView is jerking when loading with image. why?


Currently, working with recyclerview and when I am loading Image with Picasso then recyclerview is jerking and when I comment the image loading code when I execute the code recyclerview is working fine. I have posted the whole code of recycler adapter below. Please help me in solving the problem.Thank You!

    public class fa extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    public static View viewShare;
    private static final OvershootInterpolator OVERSHOOT_INTERPOLATOR = new OvershootInterpolator(4);
    private ArrayList<String> page_title = new ArrayList<>();
    private ArrayList<String> page_thumb = new ArrayList<>();
    private ArrayList<String> type = new ArrayList<>();
    private ArrayList<String> page_id = new ArrayList<>();
    private ArrayList<String> feed_message = new ArrayList<>();
    public ArrayList<String> feed_id = new ArrayList<>();
    private ArrayList<String> feed_description = new ArrayList<>();
    private ArrayList<String> feed_image = new ArrayList<>();
    private ArrayList<String> feed_time = new ArrayList<>();
    private ArrayList<String> feed_link = new ArrayList<>();
    private ArrayList<String> feed_like = new ArrayList<>();

    public static final int VIEW_TYPE_DEFAULT = 1;
    public static final int VIEW_TYPE_LOADER = 2;

    private List<FeedItem> feedItems = new ArrayList<>();

    private Context context;
    private OnFeedItemClickListener onFeedItemClickListener;

    private boolean showLoadingView = false;

    public fa(Context context, ArrayList<String> page_id, ArrayList<String> page_title, ArrayList<String> page_thumb, ArrayList<String> feed_id, ArrayList<String> feed_message, ArrayList<String> feed_description, ArrayList<String> feed_image, ArrayList<String> feed_link, ArrayList<String> feed_time, ArrayList<String> type, ArrayList<String> feed_like) {
        this.context = context;
        this.page_id = page_id;
        this.page_title = page_title;
        this.page_thumb = page_thumb;
        this.feed_id = feed_id;
        this.feed_message = feed_message;
        this.feed_description = feed_description;
        this.feed_image = feed_image;
        this.feed_link = feed_link;
        this.feed_time = feed_time;
        this.type = type;
        this.feed_like = feed_like;
    }

    private void animateHeartButton(final fa.CellFeedViewHolder holder) {
        AnimatorSet animatorSet = new AnimatorSet();

        ObjectAnimator rotationAnim = ObjectAnimator.ofFloat(holder.btnLike, "rotation", 0f, 360f);
        rotationAnim.setDuration(300);
        rotationAnim.setInterpolator(ACCELERATE_INTERPOLATOR);

        ObjectAnimator bounceAnimX = ObjectAnimator.ofFloat(holder.btnLike, "scaleX", 0.2f, 1f);
        bounceAnimX.setDuration(300);
        bounceAnimX.setInterpolator(OVERSHOOT_INTERPOLATOR);

        ObjectAnimator bounceAnimY = ObjectAnimator.ofFloat(holder.btnLike, "scaleY", 0.2f, 1f);
        bounceAnimY.setDuration(300);
        bounceAnimY.setInterpolator(OVERSHOOT_INTERPOLATOR);
        bounceAnimY.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationStart(Animator animation) {
                holder.btnLike.setImageResource(R.drawable.ic_heart_red);
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                heartAnimationsMap.remove(holder);
                dispatchChangeFinishedIfAllAnimationsEnded(holder);
            }
        });

        animatorSet.play(bounceAnimX).with(bounceAnimY).after(rotationAnim);
        animatorSet.start();

        heartAnimationsMap.put(holder, animatorSet);
    }


    private void animateHeart(final fa.CellFeedViewHolder holder) {
        AnimatorSet animatorSet = new AnimatorSet();

        ObjectAnimator rotationAnim = ObjectAnimator.ofFloat(holder.btnLike, "rotation", 0f, 360f);
        rotationAnim.setDuration(300);
        rotationAnim.setInterpolator(ACCELERATE_INTERPOLATOR);

        ObjectAnimator bounceAnimX = ObjectAnimator.ofFloat(holder.btnLike, "scaleX", 0.2f, 1f);
        bounceAnimX.setDuration(300);
        bounceAnimX.setInterpolator(OVERSHOOT_INTERPOLATOR);

        ObjectAnimator bounceAnimY = ObjectAnimator.ofFloat(holder.btnLike, "scaleY", 0.2f, 1f);
        bounceAnimY.setDuration(300);
        bounceAnimY.setInterpolator(OVERSHOOT_INTERPOLATOR);
        bounceAnimY.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationStart(Animator animation) {
                holder.btnLike.setImageResource(R.drawable.ic_heart_outline_grey);
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                heartAnimationsMap.remove(holder);
                dispatchChangeFinishedIfAllAnimationsEnded(holder);
            }
        });

        animatorSet.play(bounceAnimX).with(bounceAnimY).after(rotationAnim);
        animatorSet.start();

        heartAnimationsMap.put(holder, animatorSet);
    }



    private void dispatchChangeFinishedIfAllAnimationsEnded(fa.CellFeedViewHolder holder) {
        if (likeAnimationsMap.containsKey(holder) || heartAnimationsMap.containsKey(holder)) {
            return;
        }

//        dispatchAnimationFinished(holder);
    }

    @Override
    public void onViewRecycled(RecyclerView.ViewHolder holder) {
        super.onViewRecycled(holder);
        Log.d("HelloWorld", "OnviewRecycled");
        ((CellFeedViewHolder) holder).clear();

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == VIEW_TYPE_DEFAULT) {
            if(context == null){
                Log.d("CheckContext", ""+context);
            }
            View view = LayoutInflater.from(((MainActivity) context)).inflate(R.layout.item_feed, parent, false);
            CellFeedViewHolder cellFeedViewHolder = new CellFeedViewHolder(view);
            setupClickableViews(view, cellFeedViewHolder);
            return cellFeedViewHolder;
        } else if (viewType == VIEW_TYPE_LOADER) {
            LoadingFeedItemView view = new LoadingFeedItemView(context);
            view.setLayoutParams(new LinearLayoutCompat.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT)
            );
            return new LoadingCellFeedViewHolder(view);
        }
        return null;
    }
    private void resetLikeAnimationState(fa.CellFeedViewHolder holder) {
        holder.vBgLike.setVisibility(View.INVISIBLE);
        holder.ivLike.setVisibility(View.INVISIBLE);
    }


    private void updateLikesCounter(fa.CellFeedViewHolder holder, int toValue) {

        String likesCountTextFrom = holder.tsLikesCounter.getResources().getQuantityString(
                R.plurals.likes_count, toValue - 1, toValue - 1
        );
        holder.tsLikesCounter.setCurrentText(likesCountTextFrom);

        String likesCountTextTo = holder.tsLikesCounter.getResources().getQuantityString(
                R.plurals.likes_count, toValue, toValue
        );
        holder.tsLikesCounter.setText(likesCountTextTo);
    }
    private void setupClickableViews(final View view, final CellFeedViewHolder cellFeedViewHolder) {
        cellFeedViewHolder.btnShare.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                viewShare = cellFeedViewHolder.cardView;
                onFeedItemClickListener.onSharesClick(cellFeedViewHolder.cardView, cellFeedViewHolder.getAdapterPosition());
            }
        });
//        cellFeedViewHolder.btnMore.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                onFeedItemClickListener.onMoreClick(v, cellFeedViewHolder.getAdapterPosition());
//            }
//        });

        final GestureDetector gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onSingleTapConfirmed(MotionEvent e) {
                viewShare = cellFeedViewHolder.cardView;
                cellFeedViewHolder.vBgLike.setVisibility(View.VISIBLE);
                cellFeedViewHolder.vBgLike.setScaleY(0.1f);
                cellFeedViewHolder.vBgLike.setScaleX(0.1f);
                cellFeedViewHolder.vBgLike.setAlpha(1f);

                AnimatorSet animatorSet = new AnimatorSet();

                ObjectAnimator bgScaleYAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.vBgLike, "scaleY", 0.1f, 1f);
                bgScaleYAnim.setDuration(200);
                bgScaleYAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);
                ObjectAnimator bgScaleXAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.vBgLike, "scaleX", 0.1f, 1f);
                bgScaleXAnim.setDuration(200);
                bgScaleXAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);
                ObjectAnimator bgAlphaAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.vBgLike, "alpha", 1f, 0f);
                bgAlphaAnim.setDuration(200);
                bgAlphaAnim.setStartDelay(150);
                bgAlphaAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);

                animatorSet.playTogether(bgScaleYAnim, bgScaleXAnim, bgAlphaAnim);

                animatorSet.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        int adapterPosition = cellFeedViewHolder.getAdapterPosition();
                        onFeedItemClickListener.onFeedTitleClick(view,
                                feedItems.get(adapterPosition).page_thum,
                                feedItems.get(adapterPosition).page_title,
                                feedItems.get(adapterPosition).feed_message,
                                feedItems.get(adapterPosition).feed_image,
                                feedItems.get(adapterPosition).feed_time,
                                feedItems.get(adapterPosition).feed_description,
                                feedItems.get(adapterPosition).type,
                                feedItems.get(adapterPosition).feed_link,
                                cellFeedViewHolder.cardView, true);
                    }
                });
                animatorSet.start();

                return true;
            }

            @Override
            public boolean onDoubleTap(MotionEvent e) {
                int adapterPosition = cellFeedViewHolder.getAdapterPosition();

                if(feedItems.get(adapterPosition).isLiked == false) {
                    cellFeedViewHolder.vBgLike.setVisibility(View.VISIBLE);
                    cellFeedViewHolder.ivLike.setVisibility(View.VISIBLE);
                    cellFeedViewHolder.vBgLike.setScaleY(0.1f);
                    cellFeedViewHolder.vBgLike.setScaleX(0.1f);
                    cellFeedViewHolder.vBgLike.setAlpha(1f);
                    cellFeedViewHolder.ivLike.setScaleY(0.1f);
                    cellFeedViewHolder.ivLike.setScaleX(0.1f);

                    AnimatorSet animatorSet = new AnimatorSet();

                    ObjectAnimator bgScaleYAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.vBgLike, "scaleY", 0.1f, 1f);
                    bgScaleYAnim.setDuration(200);
                    bgScaleYAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);
                    ObjectAnimator bgScaleXAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.vBgLike, "scaleX", 0.1f, 1f);
                    bgScaleXAnim.setDuration(200);
                    bgScaleXAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);
                    ObjectAnimator bgAlphaAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.vBgLike, "alpha", 1f, 0f);
                    bgAlphaAnim.setDuration(200);
                    bgAlphaAnim.setStartDelay(150);
                    bgAlphaAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);

                    ObjectAnimator imgScaleUpYAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.ivLike, "scaleY", 0.1f, 1f);
                    imgScaleUpYAnim.setDuration(300);
                    imgScaleUpYAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);
                    ObjectAnimator imgScaleUpXAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.ivLike, "scaleX", 0.1f, 1f);
                    imgScaleUpXAnim.setDuration(300);
                    imgScaleUpXAnim.setInterpolator(fia.DECCELERATE_INTERPOLATOR);

                    ObjectAnimator imgScaleDownYAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.ivLike, "scaleY", 1f, 0f);
                    imgScaleDownYAnim.setDuration(300);
                    imgScaleDownYAnim.setInterpolator(ACCELERATE_INTERPOLATOR);
                    ObjectAnimator imgScaleDownXAnim = ObjectAnimator.ofFloat(cellFeedViewHolder.ivLike, "scaleX", 1f, 0f);
                    imgScaleDownXAnim.setDuration(300);
                    imgScaleDownXAnim.setInterpolator(ACCELERATE_INTERPOLATOR);

                    animatorSet.playTogether(bgScaleYAnim, bgScaleXAnim, bgAlphaAnim, imgScaleUpYAnim, imgScaleUpXAnim);
                    animatorSet.play(imgScaleDownYAnim).with(imgScaleDownXAnim).after(imgScaleUpYAnim);

                    animatorSet.addListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            likeAnimationsMap.remove(cellFeedViewHolder);
                            resetLikeAnimationState(cellFeedViewHolder);
                            dispatchChangeFinishedIfAllAnimationsEnded(cellFeedViewHolder);
                        }
                    });
                    animatorSet.start();

                    likeAnimationsMap.put(cellFeedViewHolder, animatorSet);
                    animateHeartButton(cellFeedViewHolder);
//                    cellFeedViewHolder.tsLikesCounter.setCurrentText(cellFeedViewHolder.vImageRoot.getResources().getQuantityString(
//                            R.plurals.likes_count, feedItems.get(adapterPosition).likesCount+1, feedItems.get(adapterPosition).likesCount+1
//                    ));
                    feedItems.get(adapterPosition).likesCount = feedItems.get(adapterPosition).likesCount+1;
                    updateLikesCounter(cellFeedViewHolder, feedItems.get(adapterPosition).likesCount);
                    if (context instanceof MainActivity) {
                        ((MainActivity) context).showLikedSnackbar(feedItems.get(adapterPosition).feed_id);
                    }
                    feedItems.get(adapterPosition).isLiked = true;
                }else if(feedItems.get(adapterPosition).isLiked == true){
                    if (context instanceof MainActivity) {
                        ((MainActivity) context).showLikedStatus(feedItems.get(adapterPosition).isLiked, null);
                    }
                }
                return true;
            }
        });

        cellFeedViewHolder.ivFeedCenter.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });




        cellFeedViewHolder.ivFeedCenter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });


        cellFeedViewHolder.feedTitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int adapterPosition = cellFeedViewHolder.getAdapterPosition();
                viewShare = cellFeedViewHolder.cardView;
                onFeedItemClickListener.onFeedTitleClick(view, feedItems.get(adapterPosition).page_thum,
                        feedItems.get(adapterPosition).page_title,
                        feedItems.get(adapterPosition).feed_message,
                        feedItems.get(adapterPosition).feed_image,
                        feedItems.get(adapterPosition).feed_time,
                        feedItems.get(adapterPosition).feed_description,
                        feedItems.get(adapterPosition).type,
                        feedItems.get(adapterPosition).feed_link,
                        cellFeedViewHolder.cardView, true);
            }
        });

        cellFeedViewHolder.btnLike.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int adapterPosition = cellFeedViewHolder.getAdapterPosition();
                if (feedItems.get(adapterPosition).isLiked == false) {
                    animateHeartButton(cellFeedViewHolder);
//                    cellFeedViewHolder.tsLikesCounter.setCurrentText(cellFeedViewHolder.vImageRoot.getResources().getQuantityString(
//                            R.plurals.likes_count, feedItems.get(adapterPosition).likesCount+1, feedItems.get(adapterPosition).likesCount+1
//                    ));
                    feedItems.get(adapterPosition).likesCount = feedItems.get(adapterPosition).likesCount+1;
                    updateLikesCounter(cellFeedViewHolder, feedItems.get(adapterPosition).likesCount);
                    if (context instanceof MainActivity) {
                        ((MainActivity) context).showLikedSnackbar(feedItems.get(adapterPosition).feed_id);
                    }
                    feedItems.get(adapterPosition).isLiked = true;
                }else if(feedItems.get(adapterPosition).isLiked == true){
                    feedItems.get(adapterPosition).isLiked = false;
//                    cellFeedViewHolder.tsLikesCounter.setCurrentText(cellFeedViewHolder.vImageRoot.getResources().getQuantityString(
//                            R.plurals.likes_count, feedItems.get(adapterPosition).likesCount, feedItems.get(adapterPosition).likesCount
//                    ));
                    animateHeart(cellFeedViewHolder);
                    feedItems.get(adapterPosition).likesCount = feedItems.get(adapterPosition).likesCount-1;
                    updateLikesCounter(cellFeedViewHolder, feedItems.get(adapterPosition).likesCount);
                    if (context instanceof MainActivity) {
                        ((MainActivity) context).showLikedStatus(feedItems.get(adapterPosition).isLiked, feedItems.get(adapterPosition).feed_id);
                    }
                }
            }
        });
//        cellFeedViewHolder.ivUserProfile.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                onFeedItemClickListener.onProfileClick(view);
//            }
//        });
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
        ((CellFeedViewHolder) viewHolder).bindView(feedItems.get(position));

        if (getItemViewType(position) == VIEW_TYPE_LOADER) {
            bindLoadingFeedItem((LoadingCellFeedViewHolder) viewHolder);
        }
    }

    private void bindLoadingFeedItem(final LoadingCellFeedViewHolder holder) {
        holder.loadingFeedItemView.setOnLoadingFinishedListener(new LoadingFeedItemView.OnLoadingFinishedListener() {
            @Override
            public void onLoadingFinished() {
                showLoadingView = false;
                notifyItemChanged(0);
            }
        });
        holder.loadingFeedItemView.startLoading();
    }

    @Override
    public int getItemViewType(int position) {
        if (showLoadingView && position == 0) {
            return VIEW_TYPE_LOADER;
        } else {
            return VIEW_TYPE_DEFAULT;
        }
    }

    @Override
    public int getItemCount() {
        return feedItems.size();
    }

    public void updateItems(boolean animated) {
        feedItems.clear();
for(int i = 0; i < page_id.size(); i++){
    feedItems.addAll(Arrays.asList(new FeedItem(Integer.parseInt(feed_like.get(i)), page_id.get(i), page_title.get(i), page_thumb.get(i), feed_id.get(i), feed_message.get(i), feed_description.get(i), feed_image.get(i), feed_link.get(i), feed_time.get(i), type.get(i))));
}
        if (animated) {
            notifyItemRangeInserted(0, feedItems.size());
        } else {
            notifyDataSetChanged();
        }
    }

    public void setOnFeedItemClickListener(OnFeedItemClickListener onFeedItemClickListener) {
        this.onFeedItemClickListener = onFeedItemClickListener;
    }

    public void showLoadingView() {
        showLoadingView = true;
        notifyItemChanged(0);
    }

    public static class CellFeedViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.ivFeedCenter)
        ImageView ivFeedCenter;
        @BindView(R.id.btnShare)
        ImageButton btnShare;
        @BindView(R.id.btnLike)
        ImageButton btnLike;
//        @BindView(R.id.btnMore)
//        ImageButton btnMore;
        @BindView(R.id.vBgLike)
        View vBgLike;
        @BindView(R.id.ivLike)
        ImageView ivLike;
        @BindView(R.id.tsLikesCounter)
        TextSwitcher tsLikesCounter;
        @BindView(R.id.sourceImage)
        ImageView sourceImage;
        @BindView(R.id.sourceTitle)
        TextView sourceTitle;
        @BindView(R.id.postTime)
        TextView postTime;
        @BindView(R.id.feedTitle)
        TextView feedTitle;
        @BindView(R.id.vImageRoot)
        FrameLayout vImageRoot;
        FeedItem feedItem;
        @BindView(R.id.card_view)
        CardView cardView;

        public CellFeedViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);

        }

        public void bindView(FeedItem feedItem) {
            this.feedItem = feedItem;

            try {


    Picasso.with(sourceImage.getContext()).load(feedItem.page_thum).resize(300, 300).transform(new CircularTransform()).networkPolicy(NetworkPolicy.NO_CACHE).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).placeholder(R.drawable.placeholder).into(sourceImage);
                }catch (IllegalArgumentException e){
                   Picasso.with(sourceImage.getContext()).load(R.drawable.placeholder).transform(new CircularTransform()).networkPolicy(NetworkPolicy.NO_CACHE).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).into(sourceImage);
                }
                try{
                 Picasso.with(ivFeedCenter.getContext()).load(feedItem.feed_image).networkPolicy(NetworkPolicy.NO_CACHE).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).placeholder(R.drawable.placeholder).into(ivFeedCenter);
             Picasso.with(ivFeedCenter.getContext()).setLoggingEnabled(true);
                }catch (IllegalArgumentException e){
 Picasso.with(ivFeedCenter.getContext()).load(R.drawable.placeholder).networkPolicy(NetworkPolicy.NO_CACHE).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).into(ivFeedCenter);
                }
                sourceTitle.setText(feedItem.page_title);
                postTime.setText(feedItem.feed_time);
                if(feedItem.type.equals("facebook")){
                    feedTitle.setMaxLines(3);
                    feedTitle.setText(feedItem.feed_message);
                }else {
                    feedTitle.setText(feedItem.feed_message);
                }
                    btnLike.setImageResource(feedItem.isLiked ? R.drawable.ic_heart_red : R.drawable.ic_heart_outline_grey);
              tsLikesCounter.setCurrentText(vImageRoot.getResources().getQuantityString(
                        R.plurals.likes_count, feedItem.likesCount, feedItem.likesCount
                ));


        }

        public FeedItem getFeedItem() {
            return feedItem;
        }

    public static class LoadingCellFeedViewHolder extends CellFeedViewHolder {

        LoadingFeedItemView loadingFeedItemView;

        public LoadingCellFeedViewHolder(LoadingFeedItemView view) {
            super(view);
            this.loadingFeedItemView = view;
        }

        @Override
        public void bindView(FeedItem feedItem) {
            super.bindView(feedItem);
        }
    }

    public static class FeedItem {
        public int likesCount;
        public String page_id;
        public String page_title;
        public String page_thum;
        public String feed_id;
        public String feed_message;
        public String feed_image;
        public String feed_time;
        public String feed_description;
        public String feed_link;
        public String type;
        public boolean isLiked = false;
        public FeedItem(int likesCount, String page_id, String page_title, String page_thum, String feed_id, String feed_message, String feed_description, String feed_image, String feed_link, String feed_time, String type) {
            this.feed_description = feed_description;
            this.likesCount = likesCount;
            this.page_id = page_id;
            this.page_title = page_title;
            this.page_thum = page_thum;
            this.feed_id = feed_id;
            this.feed_message = feed_message;
            this.feed_image = feed_image;
            this.feed_link = feed_link;
            this.feed_time = feed_time;
            this.type = type;
        }
    }

    public interface OnFeedItemClickListener {
        void onSharesClick(View v, int position);

        void onMoreClick(View v, int position);

        void onProfileClick(View v);
        void onFeedTitleClick(View v, String page_thum,
                              String page_title,
                              String feed_title,
                              String feed_image,
                              String feed_time,
                              String feed_full_desc,
                              String type,
                              String feed_link,
                              View view, boolean fa);
    }
}

Circulartransformation.java

public class CircularTransform implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        int size = Math.min(source.getWidth(), source.getHeight());

        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;

        Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
        if (squaredBitmap != source) {
            source.recycle();
        }

        Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());

        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
        paint.setShader(shader);
        paint.setAntiAlias(true);

        float r = size/2f;
        canvas.drawCircle(r, r, r, paint);

        squaredBitmap.recycle();
        return bitmap;
    }
    @Override
    public String key() {
        return "circle";
    }
}

Solution

  • I have detected the problem. Thanks to all for the help. Actually, the problem was in my drawable folder in which I have pasted the placeholder and another copy of placeholder in the drawable xxxhdpi folder and when I have deleted the placeholder from drawable then the app was not jerking. Now it's working fine.