cleveroad / fanlayoutmanager Goto Github PK
View Code? Open in Web Editor NEWUsing Fan Layout Manager you can implement the horizontal list, the items of which move like fan blades
Home Page: https://www.cleveroad.com
Using Fan Layout Manager you can implement the horizontal list, the items of which move like fan blades
Home Page: https://www.cleveroad.com
https://github.com/Cleveroad/FanLayoutManager/raw/master/images/demo_.gif
like the image at home page. 45-degree tilt.
Hello!
The code:
mManager.switchItem(recyclerView, pos);
Log.i("fan", "after switchItem: " + mManager.getSelectedItemPosition());
gives the output:
I/fan: after switchItem: -1
, no matter what was its value before.
Is it a intentional behavior?
Hello!
As I can see, the member variable isSelectedItemStraightened
is used to indicate if the selected item is being straightened at the moment. It is set to true
at the beginning of animation and in my opinion shall be set to false at the end.
This is related to this issue
When notifyDataSetChanged() on adapter, the RecyclerView scrolls automatically to top. Any thoughts?
Hello,
This library working very superb. I found one issue. When i am on detail screen and coming back to fanlayout screen, at that time i need to reload data.
So i am doing normal notifydatasetchange. But that is disturbing fanlayout, and all items and their alignments get disturbed.
Can you tell me any good approach to reload view?
The scrolling is not smooth i tried to use the exact example in the repository.
i can only scroll the recycerview items from the top or the bottom of the items in the middle it doesn't move
I'm using Picasso to load images into my ImageView. When I scroll, the position of the RecyclerView constantly gets reset to 1. Here is my code setting up the RecyclerView and FanLayoutManager.
private void setupRecyclerView(){
mPokemonListAdapter = new PokemonListAdapter(new ArrayList<PokemonListItem>(), getContext());
FanLayoutManagerSettings fanLayoutManagerSettings = FanLayoutManagerSettings
.newBuilder(getContext())
.withFanRadius(true)
.withAngleItemBounce(5)
.withViewHeightDp(400)
.withViewWidthDp(300)
.build();
FanLayoutManager fanLayoutManager = new FanLayoutManager(getContext(), fanLayoutManagerSettings);
mPokemonRecyclerView.setLayoutManager(fanLayoutManager);
mPokemonRecyclerView.setAdapter(mPokemonListAdapter);
mPokemonRecyclerView.setHasFixedSize(true);
mPokemonRecyclerView.setDrawingCacheEnabled(true);
mPokemonRecyclerView.setItemViewCacheSize(30);
mPokemonRecyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
}
And here, I use Picasso in my ViewHolder:
class ListViewHolder extends RecyclerView.ViewHolder {
private final String LOG_TAG = ListViewHolder.class.getSimpleName();
TextView mIdTextView;
TextView mNameTypeTextView;
CircleImageView mArtworkImageView;
CardView mCardView;
TextView mDescriptionTextView;
final String defaultBackgroundColor = "#FFFFFF"; //White: default CardView background color
public ListViewHolder(View view) {
super(view);
mIdTextView = (TextView) view.findViewById(R.id.pokemon_list_item_id_textview);
mNameTypeTextView = (TextView) view.findViewById(R.id.pokemon_list_item_name_type_textview);
mArtworkImageView = (CircleImageView) view.findViewById(R.id.pokemon_list_item_artwork_imageview);
mCardView = (CardView) view.findViewById(R.id.pokemon_list_item_cardview);
mDescriptionTextView = (TextView) view.findViewById(R.id.pokemon_list_item_description_textview);
}
public void bind(@NonNull PokemonListItem pokemon) {
mIdTextView.setText("#" + pokemon.getId());
StringBuilder nameType = new StringBuilder(String.format("%s \n%s", pokemon.getName(), pokemon.getType1()));
if (pokemon.getType2() != null)
nameType.append(String.format("/%s", pokemon.getType2()));
mNameTypeTextView.setText(nameType.toString());
mDescriptionTextView.setText(pokemon.getDescription());
Log.v(LOG_TAG, "Grabbing artwork.");
PokemonRepositories.getInMemoryPokemonRepository()
.getArtworkUri(pokemon.getId(), new PokemonRepository.GetArtworkUriCallback() {
@Override
public void onArtworkUriLoaded(Uri uri) {
updateArtwork(uri);
}
});
}
public void updateArtwork(final Uri artworkUri) {
Picasso.with(mContext).cancelRequest(mArtworkImageView);
Picasso.with(mContext)
.load(artworkUri.toString())
.fit().centerCrop()
.noPlaceholder()
.into(mArtworkImageView, new Callback() {
@Override
public void onSuccess() {
//Update drawable color asynchronously
Bitmap imageBitmap = ((BitmapDrawable) mArtworkImageView.getDrawable()).getBitmap();
Palette.from(imageBitmap).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
mCardView.setBackgroundColor(palette.getMutedColor(Color.parseColor(defaultBackgroundColor)));
}
});
}
@Override
public void onError() {
String errorMessage = String.format("ERROR: Could not load image with URI %s", artworkUri);
Log.e(LOG_TAG, errorMessage);
}
});
}
}
java.lang.NullPointerException
at android.support.v7.widget.RecyclerView$LayoutManager.getPosition(RecyclerView.java:7187)
at com.cleveroad.fanlayoutmanager.FanLayoutManager.findCurrentCenterViewPos(FanLayoutManager.java:980)
at com.cleveroad.fanlayoutmanager.FanLayoutManager.onSaveInstanceState(FanLayoutManager.java:164)
at android.support.v7.widget.RecyclerView.onSaveInstanceState(RecyclerView.java:1126)
at android.view.View.dispatchSaveInstanceState(View.java:12922)
at android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java:2763)
at android.support.v7.widget.RecyclerView.dispatchSaveInstanceState(RecyclerView.java:1153)
at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2749)
at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2749)
at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2749)
at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2749)
at android.view.View.saveHierarchyState(View.java:12905)
at com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java:1845)
at android.app.Activity.onSaveInstanceState(Activity.java:1277)
at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:567)
at android.support.v7.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:511)
at android.app.Activity.performSaveInstanceState(Activity.java:1226)
at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1230)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3451)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3510)
at android.app.ActivityThread.access$1100(ActivityThread.java:166)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5584)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
at dalvik.system.NativeStart.main(Native Method)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.