AsyncDrawable allow placeholder to have independent size
This commit is contained in:
		
							parent
							
								
									1f3c50da03
								
							
						
					
					
						commit
						740ff1013c
					
				| @ -42,12 +42,7 @@ public class AsyncDrawable extends Drawable { | ||||
| 
 | ||||
|         final Drawable placeholder = loader.placeholder(); | ||||
|         if (placeholder != null) { | ||||
| 
 | ||||
|             // process placeholder bounds (if it's not empty -> ignore, use whatever bounds that were set) | ||||
|             DrawableUtils.applyIntrinsicBoundsIfEmpty(placeholder); | ||||
| 
 | ||||
|             // apply placeholder immediately if we have one | ||||
|             setResult(placeholder); | ||||
|             setPlaceholderResult(placeholder); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -100,6 +95,38 @@ public class AsyncDrawable extends Drawable { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @since 3.0.1-SNAPSHOT | ||||
|      */ | ||||
|     protected void setPlaceholderResult(@NonNull Drawable placeholder) { | ||||
|         // okay, if placeholder has bounds -> use it, otherwise use original imageSize | ||||
| 
 | ||||
|         final Rect rect = placeholder.getBounds(); | ||||
| 
 | ||||
|         if (rect.isEmpty()) { | ||||
|             // if bounds are empty -> just use placeholder as a regular result | ||||
|             DrawableUtils.applyIntrinsicBounds(placeholder); | ||||
|             setResult(placeholder); | ||||
|         } else { | ||||
| 
 | ||||
|             // this condition should not be true for placeholder (at least for now) | ||||
|             if (result != null) { | ||||
|                 // but it is, unregister current result | ||||
|                 result.setCallback(null); | ||||
|             } | ||||
| 
 | ||||
|             // placeholder has bounds specified -> use them until we have real result | ||||
|             this.result = placeholder; | ||||
|             this.result.setCallback(callback); | ||||
| 
 | ||||
|             // use bounds directly | ||||
|             setBounds(rect); | ||||
| 
 | ||||
|             // just in case -> so we do not update placeholder when we have canvas dimensions | ||||
|             waitingForDimensions = false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public void setResult(@NonNull Drawable result) { | ||||
| 
 | ||||
|         // if we have previous one, detach it | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dimitry Ivanov
						Dimitry Ivanov