Last active
December 17, 2015 11:29
-
-
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%
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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