更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com1.Cropper组件功能介绍1.1.功能介绍:cropper组件是一个图片裁剪工具,在图片上显示一个可调整大小的裁剪窗口。1.2.在模拟器上运行的效果:2.cropper的使用方法2.1。新建一个项目,添加组件Har包依赖在application模块中添加HAR,只需将cropperlib-debug.har复制到entry\libs目录下(由于libs目录下的build*.har已经依赖.gradle,所以不需要修改)。2.2.修改主页面布局文件修改主页面布局文件ability_main.xml,添加com.crop.cropperlib.CropImage组件。2.3.修改MainAbilitySlince的UI加载代码MainAbilitySlince类的onStart方法@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);ButtoncropButton=(Button)findComponentById(ResourceTable.Id_cropButton);cropButton.setClickedListener(newComponent.ClickedListener(){CompidonClickedListener(){@OverridepublicvoImageimage=(Image)findComponentById(ResourceTable.Id_image);CropImagecropImage=(CropImage)findComponentById(ResourceTable.Id_cropImage);PixelMappixelMap=cropImage.getCroppedImage();image.setPixelMap(pixelMap);}});}3.Cropper组件开发与实现3.1.新建Module新建Module,类型选择HarmonyOSLibrary,模块命名为library。3.2.新建一个CropImage类新建一个CropImage类,继承Image类,实现Component.TouchEventListener、Component.DrawTask、Component.LayoutRefreshedListener接口,代码如下:(1)初始化时用于设置裁剪窗口参数:@OverridepublicvoidonRefreshed(Componentcomponent){initCropWindow();}(2)用于绘制裁剪窗口:@OverridepublicvoidonDraw(Componentcomponent,Canvascanvas){drawDarkenedSurroundingArea(canvas);drawGuidelines(canvas);drawBorder(canvas);}(3)设置修改裁剪窗口的监听触摸事件:@OverridepublicbooleanonTouchEvent(Componentcomponent,TouchEventtouchEvent){switch(touchEvent.getAction()){caseTouchEvent.PRIMARY_POINT_DOWN:MmiPointpoint1=touchEvent.getPointerPosition(touchEvent.getIndex());onActionDown(point1.getX,point1.topLeftX()-topLeftY);使()无效;返回真;caseTouchEvent.PRIMARY_POINT_UP:caseTouchEvent。取消:onActionUp();使()无效;返回真;.getX()-topLeftX,point2.getY()-topLeftY);invalidate();returntrue;default:returnfalse;}}(4)根据裁剪窗口获取裁剪后的图像publicPixelMapgetCroppedImage(){floatscaleX=getScaleX();floatscaleY=getScaleY();floattransX=getTranslationX();floattransY=getTranslationY();floatpixelMapLeft=(transX<0)?Math.abs(transX):0;floatpixelMapTop=(transY<0)?Math.abs(transY):0;floatcropX=(pixelMapLeft+Frame.LEFT.getCoordinate())/scaleX;floatcropY=(pixelMapTop+Frame.TOP.getCoordinate())/scaleY;PixelMaporiginalPixelMap=this.getPixelMap();Sizesize=originalPixelMap.getImageInfo().size;floathideX=0f;if(size.width>getWidth()){hideX=(size.width-getWidth())/2f;}floathideY=0f;if(size.height>getHeight()){hideY=(size.height-getHeight())/2f;}floatcropWidth=Math.min(Frame.getWidth()/scaleX,size.width-cropX);floatcropHeight=Math.min(Frame.getHeight()/scaleY,size.height-cropY);RectcropRect=newRect((int)(cropX+hideX),(int)(cropY+hideY),(int)cropWidth,(int)cropHeight);PixelMap.InitializationOptionsoptions=newPixelMap.InitializationOptions();options.size=new尺寸(cropRect.width,cropRect.height);returnPixelMap.create(originalPixelMap,cropRect,options);}3.3。编译HAR包使用Gradle,可以将HarmonyOSLibrary模块编译成HAR包。构建HAR包的方法如下:在Gradle的构建任务中,双击PackageDebugHar或PackageReleaseHar任务,构建一个Debug类型或Release类型的HAR。构建任务完成后,可以在cropperlib>bulid>outputs>har目录下获取生成的HAR包。项目源码地址:https://github.com/isoftstone-dev/cropper欢迎交流:HWIS-HOS@isoftstone.com更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos。51cto.com