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";
}
}
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.