Skip to content

Instantly share code, notes, and snippets.

@mancdevcarl
Last active December 17, 2015 11:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mancdevcarl/5602851 to your computer and use it in GitHub Desktop.
Save mancdevcarl/5602851 to your computer and use it in GitHub Desktop.
This fragment uses 4 vertical seekbars. Each bar is adjustable between 0% and 100%. As a bar is adjusted the other bars adjust in realtime so that the total of all bars always equals 100%
public class BarsFragment extends Fragment {
int[] positionsArray = new int[4];
VerticalSeekBar[] seekBarArray;
LinearLayout ll;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.barsfragment, container, false);
String myTag = getTag();
((MainActivity) getActivity()).setFragmentTag(myTag);
for (int x = 0; x < positionsArray.length; x++) {
positionsArray[x] = 25;
}
seekBarArray = new VerticalSeekBar[4];
seekBarArray[0] = (VerticalSeekBar) view.findViewById(R.id.redbar);
seekBarArray[1] = (VerticalSeekBar) view.findViewById(R.id.bluebar);
seekBarArray[2] = (VerticalSeekBar) view.findViewById(R.id.yellowbar);
seekBarArray[3] = (VerticalSeekBar) view.findViewById(R.id.pinkbar);
for (VerticalSeekBar vsb : seekBarArray) {
setupSeekBar(vsb);
}
ll = (LinearLayout) view.findViewById(R.id.ll);
ll.setOnLongClickListener(longClickListener);
return view;
}
private void setupSeekBar(VerticalSeekBar vsb) {
vsb.setOnSeekBarChangeListener(seekListener);
vsb.setMax(100);
vsb.setProgress(25);
}
VerticalSeekBar.OnSeekBarChangeListener seekListener = new VerticalSeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(VerticalSeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(VerticalSeekBar seekBar) {
}
@Override
public void onProgressChanged(VerticalSeekBar seekBar, int progress,
boolean fromUser) {
if (fromUser) {
int diff = 0;
for (int x = 0; x < tagsArray.length; x++) {
if (seekBar.getTag().toString().matches(tagsArray[x])) {
if (progress < positionsArray[x]) {
diff = positionsArray[x] - progress;
Log.d("*", "down : " + String.valueOf(diff));
while (0 < diff) {
int moveThis = getIndexOfRandomSeekBar(seekBar
.getTag().toString());
seekBarArray[moveThis].incrementProgressBy(1);
diff--;
}
} else if (progress > positionsArray[x]) {
diff = progress - positionsArray[x];
Log.d("*", "up : " + String.valueOf(diff));
while (0 < diff) {
int moveThis = getIndexOfRandomSeekBar(seekBar
.getTag().toString());
if (seekBarArray[moveThis].getProgress() != 0) {
seekBarArray[moveThis]
.incrementProgressBy(-1);
diff--;
}
}
}
}
}
for (int x = 0; x < tagsArray.length; x++) {
positionsArray[x] = seekBarArray[x].getProgress();
Log.d("", String.valueOf(tagsArray[x]) + "set to "
+ positionsArray[x]);
}
}
}
};
public BarsFragment() {
}
private static String[] tagsArray = new String[] { "redbar", "bluebar",
"yellowbar", "pinkbar" };
public int getIndexOfRandomSeekBar(String tag) {
ArrayList<Integer> indexes = new ArrayList<Integer>();
for (int x = 0; x < tagsArray.length; x++) {
if (!tagsArray[x].equals(tag)) {
indexes.add(x);
}
}
Collections.shuffle(indexes);
return indexes.get(0).intValue();
}
View.OnLongClickListener longClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
for (int x = 0; x < positionsArray.length; x++) {
positionsArray[x] = 25;
seekBarArray[x].setProgress(25);
}
return false;
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment