package com.github.clans.fab.sample;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.github.clans.fab.FloatingActionButton;
import com.github.fab.sample.R;
import java.util.LinkedList;
import java.util.Locale;
/**
* A very basic example of using FloatingActionButton with RecyclerView
*/
public class RecyclerViewActivity extends ActionBarActivity {
private int mScrollOffset = 4;
private int mMaxProgress = 100;
private LinkedList<ProgressType> mProgressTypes;
private Handler mUiHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recyclerview_activity);
Locale[] availableLocales = Locale.getAvailableLocales();
mProgressTypes = new LinkedList<>();
for (ProgressType type : ProgressType.values()) {
mProgressTypes.offer(type);
}
final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setMax(mMaxProgress);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new LanguageAdapter(availableLocales));
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressType type = mProgressTypes.poll();
switch (type) {
case INDETERMINATE:
fab.setShowProgressBackground(true);
fab.setIndeterminate(true);
mProgressTypes.offer(ProgressType.INDETERMINATE);
break;
case PROGRESS_POSITIVE:
fab.setIndeterminate(false);
fab.setProgress(70, true);
mProgressTypes.offer(ProgressType.PROGRESS_POSITIVE);
break;
case PROGRESS_NEGATIVE:
fab.setProgress(30, true);
mProgressTypes.offer(ProgressType.PROGRESS_NEGATIVE);
break;
case HIDDEN:
fab.hideProgress();
mProgressTypes.offer(ProgressType.HIDDEN);
break;
case PROGRESS_NO_ANIMATION:
increaseProgress(fab, 0);
break;
case PROGRESS_NO_BACKGROUND:
fab.setShowProgressBackground(false);
fab.setIndeterminate(true);
mProgressTypes.offer(ProgressType.PROGRESS_NO_BACKGROUND);
break;
}
}
});
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (Math.abs(dy) > mScrollOffset) {
if (dy > 0) {
fab.hide(true);
} else {
fab.show(true);
}
}
}
});
}
private void increaseProgress(final FloatingActionButton fab, int i) {
if (i <= mMaxProgress) {
fab.setProgress(i, false);
final int progress = ++i;
mUiHandler.postDelayed(new Runnable() {
@Override
public void run() {
increaseProgress(fab, progress);
}
}, 30);
} else {
mUiHandler.postDelayed(new Runnable() {
@Override
public void run() {
fab.hideProgress();
}
}, 200);
mProgressTypes.offer(ProgressType.PROGRESS_NO_ANIMATION);
}
}
private class LanguageAdapter extends RecyclerView.Adapter<ViewHolder> {
private Locale[] mLocales;
private LanguageAdapter(Locale[] mLocales) {
this.mLocales = mLocales;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
TextView tv = (TextView) LayoutInflater.from(parent.getContext())
.inflate(android.R.layout.simple_list_item_1, parent, false);
return new ViewHolder(tv);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(mLocales[position].getDisplayName());
}
@Override
public int getItemCount() {
return mLocales.length;
}
}
private static class ViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public ViewHolder(TextView v) {
super(v);
mTextView = v;
}
}
private enum ProgressType {
INDETERMINATE, PROGRESS_POSITIVE, PROGRESS_NEGATIVE, HIDDEN, PROGRESS_NO_ANIMATION, PROGRESS_NO_BACKGROUND
}
}