add animations to headlines list
fix typo in previous
This commit is contained in:
parent
46707f28a6
commit
1d960a3a83
|
@ -46,6 +46,8 @@ import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
import android.view.animation.Animation;
|
||||||
|
import android.view.animation.AnimationUtils;
|
||||||
import android.widget.AdapterView.AdapterContextMenuInfo;
|
import android.widget.AdapterView.AdapterContextMenuInfo;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
@ -740,7 +742,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
out.putBoolean("lazyLoadDisabled", m_lazyLoadDisabled);
|
out.putBoolean("lazyLoadDisabled", m_lazyLoadDisabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
static class ArticleiewHolder extends RecyclerView.ViewHolder {
|
static class ArticleViewHolder extends RecyclerView.ViewHolder {
|
||||||
public View view;
|
public View view;
|
||||||
public Article article;
|
public Article article;
|
||||||
|
|
||||||
|
@ -767,7 +769,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
//public int position;
|
//public int position;
|
||||||
public boolean flavorImageEmbedded;
|
public boolean flavorImageEmbedded;
|
||||||
|
|
||||||
public ArticleiewHolder(View v) {
|
public ArticleViewHolder(View v) {
|
||||||
super(v);
|
super(v);
|
||||||
|
|
||||||
view = v;
|
view = v;
|
||||||
|
@ -794,9 +796,13 @@ public class HeadlinesFragment extends Fragment {
|
||||||
flavorImageOverflow = v.findViewById(R.id.flavor_image_overflow);
|
flavorImageOverflow = v.findViewById(R.id.flavor_image_overflow);
|
||||||
flavorVideoView = (SurfaceView) v.findViewById(R.id.flavor_video);
|
flavorVideoView = (SurfaceView) v.findViewById(R.id.flavor_video);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearAnimation() {
|
||||||
|
view.clearAnimation();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ArticleListAdapter extends RecyclerView.Adapter<ArticleiewHolder> {
|
private class ArticleListAdapter extends RecyclerView.Adapter<ArticleViewHolder> {
|
||||||
private ArrayList<Article> items;
|
private ArrayList<Article> items;
|
||||||
|
|
||||||
public static final int VIEW_NORMAL = 0;
|
public static final int VIEW_NORMAL = 0;
|
||||||
|
@ -816,6 +822,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
private int m_minimumHeightToEmbed;
|
private int m_minimumHeightToEmbed;
|
||||||
boolean m_youtubeInstalled;
|
boolean m_youtubeInstalled;
|
||||||
private int m_screenHeight;
|
private int m_screenHeight;
|
||||||
|
private int m_lastAddedPosition;
|
||||||
|
|
||||||
public ArticleListAdapter(Context context, int textViewResourceId, ArrayList<Article> items) {
|
public ArticleListAdapter(Context context, int textViewResourceId, ArrayList<Article> items) {
|
||||||
super();
|
super();
|
||||||
|
@ -845,7 +852,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArticleiewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
public ArticleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
|
||||||
int layoutId = m_compactLayoutMode ? R.layout.headlines_row_compact : R.layout.headlines_row;
|
int layoutId = m_compactLayoutMode ? R.layout.headlines_row_compact : R.layout.headlines_row;
|
||||||
|
|
||||||
|
@ -863,11 +870,11 @@ public class HeadlinesFragment extends Fragment {
|
||||||
|
|
||||||
View v = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
|
View v = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
|
||||||
|
|
||||||
return new ArticleiewHolder(v);
|
return new ArticleViewHolder(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(final ArticleiewHolder holder, final int position) {
|
public void onBindViewHolder(final ArticleViewHolder holder, final int position) {
|
||||||
holder.article = items.get(position);
|
holder.article = items.get(position);
|
||||||
|
|
||||||
int headlineFontSize = Integer.parseInt(m_prefs.getString("headlines_font_size_sp", "13"));
|
int headlineFontSize = Integer.parseInt(m_prefs.getString("headlines_font_size_sp", "13"));
|
||||||
|
@ -1378,6 +1385,21 @@ public class HeadlinesFragment extends Fragment {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startAnimation(holder.view, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void startAnimation(View view, int position) {
|
||||||
|
if (position > m_lastAddedPosition) {
|
||||||
|
Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.up_from_bottom);
|
||||||
|
view.startAnimation(animation);
|
||||||
|
m_lastAddedPosition = position;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onViewDetachedFromWindow(final ArticleViewHolder holder)
|
||||||
|
{
|
||||||
|
holder.clearAnimation();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1400,7 +1422,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
return items.size();
|
return items.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTextCheckedState(final ArticleiewHolder holder, final Article article, final int position) {
|
private void updateTextCheckedState(final ArticleViewHolder holder, final Article article, final int position) {
|
||||||
String tmp = article.title.length() > 0 ? article.title.substring(0, 1).toUpperCase() : "?";
|
String tmp = article.title.length() > 0 ? article.title.substring(0, 1).toUpperCase() : "?";
|
||||||
|
|
||||||
if (article.selected) {
|
if (article.selected) {
|
||||||
|
@ -1447,7 +1469,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openGalleryForType(Article article, ArticleiewHolder holder, View transitionView) {
|
private void openGalleryForType(Article article, ArticleViewHolder holder, View transitionView) {
|
||||||
if ("iframe".equals(article.flavorImage.tagName().toLowerCase())) {
|
if ("iframe".equals(article.flavorImage.tagName().toLowerCase())) {
|
||||||
|
|
||||||
if (m_youtubeInstalled) {
|
if (m_youtubeInstalled) {
|
||||||
|
@ -1498,7 +1520,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void adjustVideoKindView(ArticleiewHolder holder, Article article) {
|
private void adjustVideoKindView(ArticleViewHolder holder, Article article) {
|
||||||
if (article.flavorImage != null) {
|
if (article.flavorImage != null) {
|
||||||
if ("iframe".equals(article.flavorImage.tagName().toLowerCase())) {
|
if ("iframe".equals(article.flavorImage.tagName().toLowerCase())) {
|
||||||
holder.flavorVideoKindView.setImageResource(R.drawable.ic_youtube_play);
|
holder.flavorVideoKindView.setImageResource(R.drawable.ic_youtube_play);
|
||||||
|
@ -1529,7 +1551,7 @@ public class HeadlinesFragment extends Fragment {
|
||||||
return px;
|
return px;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void maybeRepositionFlavorImage(View view, GlideDrawable resource, ArticleiewHolder holder, boolean forceDown) {
|
private void maybeRepositionFlavorImage(View view, GlideDrawable resource, ArticleViewHolder holder, boolean forceDown) {
|
||||||
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
|
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
|
||||||
|
|
||||||
int w = resource.getIntrinsicWidth();
|
int w = resource.getIntrinsicWidth();
|
||||||
|
|
9
org.fox.ttrss/src/main/res/anim/up_from_bottom.xml
Normal file
9
org.fox.ttrss/src/main/res/anim/up_from_bottom.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<set xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shareInterpolator="@android:anim/decelerate_interpolator">
|
||||||
|
|
||||||
|
<translate
|
||||||
|
android:fromXDelta="0%" android:toXDelta="0%"
|
||||||
|
android:fromYDelta="60%" android:toYDelta="0%"
|
||||||
|
android:duration="250" />
|
||||||
|
</set>
|
Loading…
Reference in New Issue
Block a user