class CustomProgressBar extends Drawable{
@Override
protected boolean onLevelChange(int level) {
//doSomething
return super.onLevelChange(level);
}
}
GenericDraweeHierarchyBuilder progressHierarchyBuilder = new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy progressHierarchy = progressHierarchyBuilder
.setProgressBarImage(new ProgressBarDrawable(), ScalingUtils.ScaleType.CENTER_INSIDE)
.build();
progressImageDraweeView.setHierarchy(progressHierarchy);
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
float bitmapWidth = bitmap.getWidth();
float bitmapHeight = bitmap.getHeight();
Scale[o] = (params[o].height / bitmapHeight >= params[o].width / bitmapWidth) ? params[o].height / bitmapHeight : params[o].width / bitmapWidth;
float scaleBitmapWidth = Scale[o] * bitmapWidth;
float scaleBitmapHeight = Scale[o] * bitmapHeight;
Matrix matrix = new Matrix();
matrix.postScale(Scale[o], Scale[o]);
if (scaleBitmapWidth > scaleBitmapHeight) { //宽度图
if (imagedata.get(o).getFace_center_x() == 0 && imagedata.get(o).getFace_center_y() == 0) {
if(scaleBitmapWidth - params[o].width < 0.5 * scaleBitmapWidth - params[o].width / 2){
matrix.postTranslate( params[o].width - scaleBitmapWidth ,0);
}else{
matrix.postTranslate(-(0.5f * scaleBitmapWidth - params[o].width / 2), 0);
}
} else {
if(scaleBitmapWidth - params[o].width < scaleBitmapWidth * imagedata.get(o).getFace_center_x() - params[o].width / 2) {
matrix.postTranslate(params[o].width - scaleBitmapWidth, 0);
} else {
if (scaleBitmapWidth * imagedata.get(o).getFace_center_x() - params[o].width / 2 < 0) {
matrix.postTranslate(0, 0);
} else {
matrix.postTranslate(-(scaleBitmapWidth * imagedata.get(o).getFace_center_x() - params[o].width / 2), 0);
}
}
}
} else { //高度图
if (imagedata.get(o).getFace_center_x() == 0 && imagedata.get(o).getFace_center_y() == 0) {
if(scaleBitmapHeight - params[o].height < 0.5 * scaleBitmapHeight - params[o].height / 2){
matrix.postTranslate(0, params[o].height - scaleBitmapHeight);
}else{
matrix.postTranslate(0,-(0.5f * scaleBitmapHeight - params[o].height / 2));
}
} else {
if (scaleBitmapHeight - params[o].height < scaleBitmapHeight * imagedata.get(o).getFace_center_y() - params[o].height / 2) {
matrix.postTranslate(0, params[o].height - scaleBitmapHeight);
} else {
if (scaleBitmapHeight * imagedata.get(o).getFace_center_y() - params[o].height / 2 < 0) {
matrix.postTranslate(0, 0);
} else {
matrix.postTranslate(0, -(scaleBitmapHeight * imagedata.get(o).getFace_center_y() - params[o].height / 2));
}
}
}
}
vh.image[o].setImageMatrix(matrix);
}
fresco:actualImageScaleType="focusCrop"
PointF focusPoint; // your app populates the focus point mSimpleDraweeView .getHierarchy() .setActualImageFocusPoint(focusPoint);
public static abstract class AbstractScaleType implements ScaleType {
@Override
public Matrix getTransform(Matrix outTransform, Rect parentRect, int childWidth, int childHeight, float focusX, float focusY) {
// 取宽度和高度需要缩放的倍数中最小的一个
final float sX = (float) parentRect.width() / (float) childWidth;
final float sY = (float) parentRect.height() / (float) childHeight;
float scale = Math.min(scaleX, scaleY);
// 计算为了均分空白区域,需要偏移的x、y方向的距离
float dx = parentRect.left + (parentRect.width() - childWidth * scale) * 0.5f;
float dy = parentRect.top + (parentRect.height() - childHeight * scale) * 0.5f;
// 最后我们应用它
outTransform.setScale(scale, scale);
outTransform.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));
return outTransform;
}
}
ControllerListener controllerListener = new BaseControllerListener(){
@Override
public void onFinalImageSet(String id, Object imageInfo, Animatable animatable) {
if(animatable!=null){
animatable.start();
}
}
@Override
public void onFailure(String id, Throwable throwable) {
Toast.makeText(context,"图片加载失败",Toast.LENGTH_SHORT).show();
}
};
DraweeController gifController = Fresco.newDraweeControllerBuilder()
.setUri(Uri.parse("http://img.huofar.com/data/jiankangrenwu/shizi.gif"))
.setOldController(gifImageView.getController())
.setControllerListener(controllerListener)
.build();
gifImageView.setController(gifController);
Postprocessor redMeshPostProcessor = new BasePostprocessor() {
@Override
public void process(Bitmap bitmap) {
for (int x = 0; x < bitmap.getWidth(); x+=2) {
for (int y = 0; y < bitmap.getHeight(); y+=2) {
bitmap.setPixel(x, y, Color.TRANSPARENT);
}
}
}
@Override
public String getName() {
return super.getName();
}
};
ImageRequest processorImageRequest = ImageRequestBuilder
.newBuilderWithSource(Uri.parse("http://avatar.csdn.net/4/E/8/1_y1scp.jpg"))
.setPostprocessor(redMeshPostProcessor)
.build();
DraweeController processorController = Fresco.newDraweeControllerBuilder()
.setImageRequest(processorImageRequest)
.setOldController(processImageView.getController())
.build();
processImageView.setController(processorController);
/**
* 设置渐进式JPEG Config
* */
ProgressiveJpegConfig config = new ProgressiveJpegConfig() {
@Override
public int getNextScanNumberToDecode(int scanNumber) {
return 0;
}
@Override
public QualityInfo getQualityInfo(int scanNumber) {
return null;
}
};
/**
* 直接控制ImagePipeline Config
* */
ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig.newBuilder(context)
.setProgressiveJpegConfig(config)
.setDownsampleEnabled(true)
.build();
/**
* 初始化使得Fresco支持渐进式JPEG的加载
* */
Fresco.initialize(this,imagePipelineConfig);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse("http://pooyak.com/p/progjpeg/jpegload.cgi"))
.setProgressiveRenderingEnabled(true) //设置支持渐进式JPEG
.build();
DraweeController progressiveJPEGController = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(progressiveJpegImageView.getController())
.build();
progressiveJpegImageView.setController(progressiveJPEGController);
DraweeController gifController = Fresco.newDraweeControllerBuilder()
.setUri(Uri.parse("http://img.huofar.com/data/jiankangrenwu/shizi.gif"))
.setAutoPlayAnimations(true) //使动画自动播放
.setOldController(gifImageView.getController())
.build();
gifImageView.setController(gifController);
Animatable animatable = mSimpleDraweeView.getController().getAnimatable();
if (animatable != null) {
animatable.start();
// later
animatable.stop();
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有