के साथ सिंक्रनाइज़ छवि को लोड करना मैं एक एस्प्रेसो मैचर लिखना चाहता हूं जो सत्यापित करता है कि 'ImageView' का एक विशिष्ट बिटमैप सेट है। चूंकि ऐप ग्लाइड के माध्यम से छवियों की लोडिंग करता है, मैंने सोचा कि मुझे वास्तव में अपेक्षित और वास्तविक बिटमैप्स की तुलना करने से पहले क्रॉपिंग/सेंसरिंग के लिए परीक्षण पक्ष पर ऐसा करना होगा।ग्लाइड
यहाँ मैं अब तक के साथ आया है:
BitmapRequestBuilder<Uri, Bitmap> bitmapRequest = Glide.with(imageView.getContext())
.load(Uri.parse("file:///android_asset/" + mPath))
.asBitmap();
switch (imageView.getScaleType()) {
case CENTER_CROP:
bitmapRequest.centerCrop();
break;
case FIT_CENTER:
case FIT_START:
case FIT_END:
bitmapRequest.fitCenter();
break;
default:
// no scaling applied to the ImageView under test
}
AtomicReference<Bitmap> bmRef = new AtomicReference<>();
bitmapRequest.into(new SimpleTarget<Bitmap>(
imageView.getMeasuredWidth(),
imageView.getMeasuredHeight()
) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
bmRef.set(resource);
}
});
// ???
try {
Bitmap expected = bmRef.get();
return expected.sameAs(bitmap);
} catch (Exception e) {
throw new IllegalStateException("could not load asset " + mPath, e);
}
अब यहां मुद्दा यह है कि मैं एक गतिरोध है निश्चित रूप से है। मैं मुख्य धागे पर हूं (मैचर मुख्य थ्रेड आईआईआरसी पर निष्पादित किया गया है) और ग्लाइड बैकएंड थ्रेड को बिटमैप लोड करने के लिए चाहता है और फिर मुख्य थ्रेड ('ऑन रिसोर्स रीडी' में) पर लौटता है। इसलिए मुझे मुख्य थ्रेड चलते समय, अंदर के अंदर पोस्ट किए गए परिणाम के लिए बाहरी से प्रतीक्षा करने की आवश्यकता है।
I (असफल) ने Looper.loop()
के माध्यम से // ???
में वर्तमान लूपर को अग्रिम करने की कोशिश की और नियमित लॉक/प्रतीक्षा दृष्टिकोण भी कोशिश की, लेकिन कुछ भी काम नहीं किया। मैं विचारों से बाहर हूं ...
यह इस मामले में काम नहीं करता है, दुर्भाग्य से, बस इसे फिर से कोशिश की। –