所以我目前正在使用滑动将服务器中的图像加载到imageView中。要在图像之间切换,我使用的是搜索栏。该搜索栏由驱动器的持续时间填充(因此开始将为0,结束将是驱动器的结束时间)。如果用户选择了一个新驱动器,那么当搜索栏填满时,我就会显示一个进度条。然后,当用户移动搜索条时,我想要一个垂直进度条,直到图像加载。这是我到目前为止所做的,当前发生的事情是微调器仅在我加载片段时显示,而不是在用户选择驱动器时显示。
public class SecondFragment extends Fragment implements APIRequestsUtil.APIRequestResponseListener
{
View myView;
Map<String, Route> drives;
ImageView imageView;
SeekBar mySeekBar;
ProgressBar myProgress;
int totalImages = 0;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.second_layout, container, false);
APIRequestsUtil.setOnAPIResponseListener(this);
imageView = (ImageView) myView.findViewById(R.id.driveImageView);
mySeekBar = (SeekBar) myView.findViewById(R.id.seekBar);
mySeekBar.setMax(1);
myProgress = (ProgressBar) myView.findViewById(R.id.progress);
return myView;
}
@Nullable
private void populateView() {
this.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
drives = APIRequestsUtil.getRoutes();
// edit: you need to generate your List data from the entrySet
// the ArrayAdapter cannot take a Set argument - needs to be a List
List<Drive> list = new ArrayList<Drive>();
for (Map.Entry drive : drives.entrySet()) {
Drive d = new Drive(drive.getKey().toString(), (Route) drive.getValue());
list.add(d);
}
// populate the ListView
// may need to change "getActivity()" to something else
// this constructor needs the "this" context of the activity
DriveURLAdapter drivesURLAdapter = new DriveURLAdapter(getActivity(), list);
final Spinner spinner = (Spinner) myView.findViewById(R.id.spinner);
drivesURLAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(
new NothingSelectedSpinnerAdapter(
drivesURLAdapter,
R.layout.spinner_row_nothing_selected,
getActivity()));
if (spinner.getTag() != null) {
spinner.setSelection((int) spinner.getTag());
}
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long l) {
if (spinner.getTag() != null && pos != (int) spinner.getTag()) {
spinner.setTag(pos);
final String url = DriveURLAdapter.DriveURL;
int driveTime = (int) DriveURLAdapter.driveSeconds;
final List<String> URLs = new ArrayList<String>();
for (int x = 0; x < driveTime; x++) {
URLs.add(url + "/sec" + x + ".jpg");
}
downloadOnlyImages(URLs);
mySeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Glide.with(getActivity())
.load(URLs.get(progress))
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
myProgress.setVisibility(View.GONE);
return false;
}
})
.override(480,270)
.fitCenter()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
spinner.setTag(pos);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(getActivity(), "Please select a drive to display.", Toast.LENGTH_SHORT).show();
}
});
}
});
}
@Override
public void onFailure(Request request, Throwable throwable) {
}
@Override
public void onResponse(Response response) {
populateView();
}
@Override
public void onResume() {
super.onResume();
try {
APIRequestsUtil.run();
} catch (Exception e) {
e.printStackTrace();
}
}
private void downloadOnlyImages(List<String> URLs){
totalImages = 0;
for(final String url: URLs){
Glide.with(this)
.load(url)
.downloadOnly(new SimpleTarget<File>(480,270) {
@Override
public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) {
Log.i("glide", "image downloaded" + url);
mySeekBar.setMax(totalImages++);
}
});
}
}
}