全部 文章 问答 分享 共找到112个相关内容
[问答] ViewGroup中ImageView的堆叠问题

自定义组合控件在继承viewGroup的时候,里面的子View是ImageView,在布局的时候,第一个Imageview不论是先layout还是后layout,都不会显示在最上面。

2022-03-21 00:30 · ViewGroup / Imageview
[文章] Android xml中imageview设置src的耗时分析
背景在trace中查看rv的item创建过程,发现一个耗时的地方,通过查看组件id发现是一个imageview,图片的解码耗时了。
2021-11-30 17:19 · Android / 性能优化 / 断点
[问答] 有几种方式可以实现圆形ImageView,常用的方式是哪种
有几种方式可以实现圆形ImageView,常用的方式是哪种
2020-04-19 18:59 · Android / ImageView
[问答] ImageView设置android:scaleType="centerCrop",Padding属性值失效
安卓领券联盟,精选fragment,给ImageView设置android:scaleType="centerCrop",同一布局内的TextView的Padding属性值失效正常显示的ui给图片设置android
2020-05-22 18:24 · Android / 领券联盟
[问答] 领券联盟,特惠界面根据ImageView大小加载图片,在获取控件高宽时值为0
第一次进入特惠界面时,无法获取ImageView的高宽,但往下浏览,又可以获取到ImageView的高宽布局代码
2020-05-25 13:55 · 领券联盟 / Android
[文章] Android 圆角ImageView
背景图片展示需要圆角,原生并没有提供这样的api实现。网上很多大神都分享过如何做圆角。1:path和矩形裁切2:bitmap和path裁切3:应该还有其他的遇到的坑我记得在Android10上面裁切的api和path直接有点问题,顺序问题。然后具体不记得了,后面可以去查下。结果:456789正常10无法裁切今天的主角代码是从某大神哪里得到的,具体忘记了。先分享代码给大家吧。这个控件目前在公司项目使用,也在上家公司的2个项目中使用,没有出现问题。publicclassRadiusImageViewextendsAppCompatImageView{privatestaticfinalintDEFAULT_BORDER_COLOR=Color.GRAY;privatestaticfinalBitmap.ConfigBITMAP_CONFIG=Bitmap.Config.ARGB_8888;privatestaticfinalintCOLOR_DRAWABLE_DIMEN=2;privatebooleanmIsSelected=false;privatebooleanmIsOval=false;privatebooleanmIsCircle=false;privateintmBorderWidth;privateintmBorderColor;privateintmSelectedBorderWidth;privateintmSelectedBorderColor;privateintmSelectedMaskColor;privatebooleanmIsTouchSelectModeEnabled=true;privateintmCornerRadius;privatePaintmBitmapPaint;privatePaintmBorderPaint;privateColorFiltermColorFilter;privateColorFiltermSelectedColorFilter;privateBitmapShadermBitmapShader;privatebooleanmNeedResetShader=false;privateRectFmRectF=newRectF();privateBitmapmBitmap;privateMatrixmMatrix;privateintmWidth;privateintmHeight;publicRadiusImageView(Contextcontext){this(context,null,R.attr.RadiusImageViewStyle);}publicRadiusImageView(Contextcontext,AttributeSetattrs){this(context,attrs,R.attr.RadiusImageViewStyle);}publicRadiusImageView(Contextcontext,AttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAttr);initAttrs(context,attrs,defStyleAttr);}privatevoidinitAttrs(Contextcontext,AttributeSetattrs,intdefStyleAttr){mBorderPaint=newPaint();mBorderPaint.setAntiAlias(true);mBorderPaint.setStyle(Paint.Style.STROKE);mMatrix=newMatrix();setScaleType(ScaleType.CENTER_CROP);TypedArrayarray=context.obtainStyledAttributes(attrs,R.styleable.RadiusImageView,defStyleAttr,0);mBorderWidth=array.getDimensionPixelSize(R.styleable.RadiusImageView_riv_border_width,0);mBorderColor=array.getColor(R.styleable.RadiusImageView_riv_border_color,DEFAULT_BORDER_COLOR);mSelectedBorderWidth=array.getDimensionPixelSize(R.styleable.RadiusImageView_riv_selected_border_width,mBorderWidth);mSelectedBorderColor=array.getColor(R.styleable.RadiusImageView_riv_selected_border_color,mBorderColor);mSelectedMaskColor=array.getColor(R.styleable.RadiusImageView_riv_selected_mask_color,Color.TRANSPARENT);if(mSelectedMaskColor!=Color.TRANSPARENT){mSelectedColorFilter=newPorterDuffColorFilter(mSelectedMaskColor,PorterDuff.Mode.DARKEN);}mIsTouchSelectModeEnabled=array.getBoolean(R.styleable.RadiusImageView_riv_is_touch_select_mode_enabled,true);mIsCircle=array.getBoolean(R.styleable.RadiusImageView_riv_is_circle,false);if(!mIsCircle){mIsOval=array.getBoolean(R.styleable.RadiusImageView_riv_is_oval,false);}if(!mIsOval){mCornerRadius=array.getDimensionPixelSize(R.styleable.RadiusImageView_riv_corner_radius,0);}array.recycle();}@OverridepublicvoidsetScaleType(ScaleTypescaleType){if(scaleType!=ScaleType.CENTER_CROP){thrownewIllegalArgumentException(String.format("不支持ScaleType%s",scaleType));}super.setScaleType(scaleType);}@OverridepublicvoidsetAdjustViewBounds(booleanadjustViewBounds){if(adjustViewBounds){thrownewIllegalArgumentException("不支持adjustViewBounds");}}publicvoidsetBorderWidth(intborderWidth){if(mBorderWidth!=borderWidth){mBorderWidth=borderWidth;invalidate();}}publicvoidsetBorderColor(@ColorIntintborderColor){if(mBorderColor!=borderColor){mBorderColor=borderColor;invalidate();}}publicvoidsetCornerRadius(intcornerRadius){if(mCornerRadius!=cornerRadius){mCornerRadius=cornerRadius;if(!mIsCircle&&!mIsOval){invalidate();}}}publicvoidsetSelectedBorderColor(@ColorIntintselectedBorderColor){if(mSelectedBorderColor!=selectedBorderColor){mSelectedBorderColor=selectedBorderColor;if(mIsSelected){invalidate();}}}publicvoidsetSelectedBorderWidth(intselectedBorderWidth){if(mSelectedBorderWidth!=selectedBorderWidth){mSelectedBorderWidth=selectedBorderWidth;if(mIsSelected){invalidate();}}}publicvoidsetSelectedMaskColor(@ColorIntintselectedMaskColor){if(mSelectedMaskColor!=selectedMaskColor){mSelectedMaskColor=selectedMaskColor;if(mSelectedMaskColor!=Color.TRANSPARENT){mSelectedColorFilter=newPorterDuffColorFilter(mSelectedMaskColor,PorterDuff.Mode.DARKEN);}else{mSelectedColorFilter=null;}if(mIsSelected){invalidate();}}mSelectedMaskColor=selectedMaskColor;}publicvoidsetCircle(booleanisCircle){if(mIsCircle!=isCircle){mIsCircle=isCircle;requestLayout();invalidate();}}publicvoidsetOval(booleanisOval){booleanforceUpdate=false;if(isOval){if(mIsCircle){//必须先取消圆形mIsCircle=false;forceUpdate=true;}}if(mIsOval!=isOval||forceUpdate){mIsOval=isOval;requestLayout();invalidate();}}publicintgetBorderColor(){returnmBorderColor;}publicintgetBorderWidth(){returnmBorderWidth;}publicintgetCornerRadius(){returnmCornerRadius;}publicintgetSelectedBorderColor(){returnmSelectedBorderColor;}publicintgetSelectedBorderWidth(){returnmSelectedBorderWidth;}publicintgetSelectedMaskColor(){returnmSelectedMaskColor;}publicbooleanisCircle(){returnmIsCircle;}publicbooleanisOval(){return!mIsCircle&&mIsOval;}@OverridepublicbooleanisSelected(){returnmIsSelected;}@OverridepublicvoidsetSelected(booleanisSelected){if(mIsSelected!=isSelected){mIsSelected=isSelected;invalidate();}}publicvoidsetTouchSelectModeEnabled(booleantouchSelectModeEnabled){mIsTouchSelectModeEnabled=touchSelectModeEnabled;}publicbooleanisTouchSelectModeEnabled(){returnmIsTouchSelectModeEnabled;}publicvoidsetSelectedColorFilter(ColorFiltercf){if(mSelectedColorFilter==cf){return;}mSelectedColorFilter=cf;if(mIsSelected){invalidate();}}@OverridepublicvoidsetColorFilter(ColorFiltercf){if(mColorFilter==cf){return;}mColorFilter=cf;if(!mIsSelected){invalidate();}}@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){super.onMeasure(widthMeasureSpec,heightMeasureSpec);intwidth=getMeasuredWidth();intheight=getMeasuredHeight();if(mIsCircle){intsize=Math.min(width,height);setMeasuredDimension(size,size);}else{intwidthMode=MeasureSpec.getMode(widthMeasureSpec);intheightMode=MeasureSpec.getMode(heightMeasureSpec);if(mBitmap==null){return;}booleanwidthWrapContent=widthMode==MeasureSpec.AT_MOST||widthMode==MeasureSpec.UNSPECIFIED;booleanheightWrapContent=heightMode==MeasureSpec.AT_MOST||heightMode==MeasureSpec.UNSPECIFIED;floatbmWidth=mBitmap.getWidth(),bmHeight=mBitmap.getHeight();floatscaleX=width/bmWidth,scaleY=height/bmHeight;if(widthWrapContent&&heightWrapContent){//保证长宽比if(scaleX>=1&&scaleY>=1){setMeasuredDimension((int)bmWidth,(int)bmHeight);return;}if(scaleX>=1){setMeasuredDimension((int)(bmHeight*scaleY),height);return;}if(scaleY>=1){setMeasuredDimension(width,(int)(bmHeight*scaleX));return;}if(scaleX<scaleY){setMeasuredDimension(width,(int)(bmHeight*scaleX));}else{setMeasuredDimension((int)(bmWidth*scaleY),height);}}elseif(widthWrapContent){setMeasuredDimension((int)(bmWidth*scaleY),height);}elseif(heightWrapContent){setMeasuredDimension(width,(int)(bmHeight*scaleX));}}}@OverridepublicvoidsetImageDrawable(Drawabledrawable){super.setImageDrawable(drawable);setupBitmap();}@OverridepublicvoidsetImageURI(Uriuri){super.setImageURI(uri);setupBitmap();}privateBitmapgetBitmap(){Drawabledrawable=getDrawable();if(drawable==null){returnnull;}if(drawableinstanceofBitmapDrawable){Bitmapbitmap=((BitmapDrawable)drawable).getBitmap();if(bitmap==null){returnnull;}floatbmWidth=bitmap.getWidth(),bmHeight=bitmap.getHeight();if(bmWidth==0||bmHeight==0){returnnull;}//ensureminWidthandminHeightfloatminScaleX=getMinimumWidth()/bmWidth,minScaleY=getMinimumHeight()/bmHeight;if(minScaleX>1||minScaleY>1){floatscale=Math.max(minScaleX,minScaleY);Matrixmatrix=newMatrix();matrix.postScale(scale,scale);returnBitmap.createBitmap(bitmap,0,0,(int)bmWidth,(int)bmHeight,matrix,false);}else{returnbitmap;}}try{Bitmapbitmap;if(drawableinstanceofColorDrawable){bitmap=Bitmap.createBitmap(COLOR_DRAWABLE_DIMEN,COLOR_DRAWABLE_DIMEN,BITMAP_CONFIG);}else{bitmap=Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(),BITMAP_CONFIG);}Canvascanvas=newCanvas(bitmap);drawable.setBounds(0,0,canvas.getWidth(),canvas.getHeight());drawable.draw(canvas);returnbitmap;}catch(Exceptione){e.printStackTrace();returnnull;}}publicvoidsetupBitmap(){Bitmapbm=getBitmap();if(bm==mBitmap){return;}mBitmap=bm;if(mBitmap==null){mBitmapShader=null;invalidate();return;}mNeedResetShader=true;mBitmapShader=newBitmapShader(mBitmap,Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);if(mBitmapPaint==null){mBitmapPaint=newPaint();mBitmapPaint.setAntiAlias(true);}mBitmapPaint.setShader(mBitmapShader);requestLayout();invalidate();}privatevoidupdateBitmapShader(){mMatrix.reset();mNeedResetShader=false;if(mBitmapShader==null||mBitmap==null){return;}finalfloatbmWidth=mBitmap.getWidth();finalfloatbmHeight=mBitmap.getHeight();finalfloatscaleX=mWidth/bmWidth;finalfloatscaleY=mHeight/bmHeight;finalfloatscale=Math.max(scaleX,scaleY);mMatrix.setScale(scale,scale);mMatrix.postTranslate(-(scale*bmWidth-mWidth)/2,-(scale*bmHeight-mHeight)/2);mBitmapShader.setLocalMatrix(mMatrix);mBitmapPaint.setShader(mBitmapShader);}privatevoiddrawBitmap(Canvascanvas,intborderWidth){finalfloathalfBorderWidth=borderWidth*1.0f/2;mBitmapPaint.setColorFilter(mIsSelected?mSelectedColorFilter:mColorFilter);if(mIsCircle){intcenter=getWidth()/2;canvas.drawCircle(center,center,center-halfBorderWidth,mBitmapPaint);}else{mRectF.left=halfBorderWidth;//noinspectionSuspiciousNameCombinationmRectF.top=halfBorderWidth;mRectF.right=getWidth()-halfBorderWidth;mRectF.bottom=getHeight()-halfBorderWidth;if(mIsOval){canvas.drawOval(mRectF,mBitmapPaint);}else{canvas.drawRoundRect(mRectF,mCornerRadius,mCornerRadius,mBitmapPaint);}}}privatevoiddrawBorder(Canvascanvas,intborderWidth){if(borderWidth<=0){return;}finalfloathalfBorderWidth=borderWidth*1.0f/2;mBorderPaint.setColor(mIsSelected?mSelectedBorderColor:mBorderColor);mBorderPaint.setStrokeWidth(borderWidth);if(mIsCircle){intradius=getWidth()/2;canvas.drawCircle(radius,radius,radius-halfBorderWidth,mBorderPaint);}else{mRectF.left=halfBorderWidth;//noinspectionSuspiciousNameCombinationmRectF.top=halfBorderWidth;mRectF.right=getWidth()-halfBorderWidth;mRectF.bottom=getHeight()-halfBorderWidth;if(mIsOval){canvas.drawOval(mRectF,mBorderPaint);}else{canvas.drawRoundRect(mRectF,mCornerRadius,mCornerRadius,mBorderPaint);}}}@OverrideprotectedvoidonDraw(Canvascanvas){intwidth=getWidth(),height=getHeight();if(width<=0||height<=0){return;}intborderWidth=mIsSelected?mSelectedBorderWidth:mBorderWidth;if(mBitmap==null||mBitmapShader==null){drawBorder(canvas,borderWidth);return;}if(mWidth!=width||mHeight!=height||mNeedResetShader){mWidth=width;mHeight=height;updateBitmapShader();}drawBitmap(canvas,borderWidth);drawBorder(canvas,borderWidth);}@OverridepublicbooleanonTouchEvent(MotionEventevent){if(!this.isClickable()){this.setSelected(false);returnsuper.onTouchEvent(event);}if(!mIsTouchSelectModeEnabled){returnsuper.onTouchEvent(event);}switch(event.getAction()){caseMotionEvent.ACTION_DOWN:this.setSelected(true);break;caseMotionEvent.ACTION_UP:caseMotionEvent.ACTION_SCROLL:caseMotionEvent.ACTION_OUTSIDE:caseMotionEvent.ACTION_CANCEL:this.setSelected(false);break;default:break;}returnsuper.onTouchEvent(event);}}需要的属性,自己在attrs中增加自定义属性<!--圆角的img--><attrname="RadiusImageViewStyle"format="reference"/><declare-styleablename="RadiusImageView"><!--边框宽度,默认:0--><attrname="riv_border_width"format="dimension"/><!--边框的颜色,默认:Color.GRAY--><attrname="riv_border_color"format="color"/><!--选中时,覆盖在图片上的图层颜色,默认:Color.TRANSPARENT--><attrname="riv_selected_mask_color"format="color"/><!--边框选中时的颜色,默认:Color.GRAY--><attrname="riv_selected_border_color"format="color"/><!--边框选中时的宽度,默认:0--><attrname="riv_selected_border_width"format="dimension"/><!--圆角的大小,默认0--><attrname="riv_corner_radius"format="dimension"/><!--是否是椭圆形,默认:false--><attrname="riv_is_oval"format="boolean"/><!--图片是否是圆形的,默认:false--><attrname="riv_is_circle"format="boolean"/><!--图片是否可触摸选中,默认:true--><attrname="riv_is_touch_select_mode_enabled"format="boolean"/></declare-styleable>使用控件的包名自己修改自己的<com.debug.widget.RadiusImageViewandroid:id="@+id/iv_loop_cover"android:layout_width="@dimen/sw_40dp"android:layout_height="@dimen/sw_40dp"android:scaleType="centerCrop"app:riv_border_color="#ff0000"app:riv_border_width="@dimen/sw_1dp"app:riv_corner_radius="@dimen/sw_4dp"tools:src="@mipmap/ic_launcher"/>可以增加边框颜色,边框大小,圆角的大小。其他方案我之前使用过glide的圆角api,在某些手机上面失效,貌似是vivo的具体型号不记得了。目前我一直使用这个控件,因为现在没有Android11的设备没测试还不知道情况。线上也有11的设备,但是用户也没反馈过有图片问题,暂时就表明正常使用吧。如果发现有问题,记得联系我:1124466590:qq
2021-03-25 10:20 · Android / 圆角ImageView / ImageView / 断点 / debug
[文章] UIKit快速入门之UIImageView(6)
//imageView.image=fileimage//关键属性imageView.contentMode=.scaleAspectFit//边框设置imageView.layer.borderColor
2020-10-26 15:00 · Swift / iOS / UIImageView
[问答] 请问,如何在滑动列表时实时切换图片?
大概效果:顶部有个水平的列表展示所有图片,然后下面有个imageview,当水平列表中的某一张图片被划到水平列表的中间时,能把那图片实时的在imageview中进行展示,
2020-04-20 20:44 · 滑动列表实时切换图片
[文章] ViewPager只能横着滚动?no,也可以竖着滚动,ViewPager.PageTransformer有奇效,简单实例,复制粘贴就有效果。
privateint[]mImgIds=newint[]{R.mipmap.nvhaione,R.mipmap.nvhaitwo,R.mipmap.nvhaithree};privateList<ImageView
2019-12-09 16:35 · PageTransformer
[问答] recycleview 多类型 点击事件
privatestaticintnPostion;privatestaticPicBeanmPicBean;publicTupianHolder(@NonNullViewitemView){super(itemView);imageView
2020-05-29 10:09 · 安卓
[问答] 重新安装app后,RecyclerView显示的数据错乱了,这也是为什么呢?
RecyclerView子项布局是:imageview+textview,然后重新安装后,imageview+textview显示的数据和之前不一样了。
2019-11-30 08:33 · android
[文章] Android 评分控件
(para);imageView.setPadding(0,0,Math.round(starImagePadding),0);if(isEmpty){imageView.setImageDrawable
2020-03-10 16:04 · Android / 自定义控件
[问答] 领券联盟viewpager无限循环问题
Strings=mStrings.get(realPosition);ImageViewimageView=newImageView(container.getContext());Glide.with(imageView.getContext
2020-06-23 22:29 · Viewpager无限循环
[问答] View移动过程中会出现背景呈波浪形闪烁和抖动
过程是点击拍照生成的图片转换成圆形Bitma,然后设置为ImageView的背景,再将ImageView添加到布局中并开启随机移动。
2021-09-01 09:25 · View
[问答] RecyclerView中使用Gilde第一次加载网络图片慢
item.setAvailable(true);

binding.imageviewMediaItem.setScaleType(ImageView.ScaleType.CENTER_CROP

2023-02-13 14:19 · glide / recyclerview
[问答] Android获取esp32cam视频流

将视频流存储到sd卡中,然后通过imageview刷新显示出来,imageview显示之前bitmap数据都能打印出来,而且在鸿蒙系统下是可以正常刷新显示的,在Android 12就不行,有大哥知道这可能是啥问题吗

2022-12-01 11:50 · Android / 外部存储 / esp32cam
[文章] 自定义头像装饰View实现
思路2除此之外,我们还可以通过自定义ImageView来实现。
2022-04-02 10:44 · 安卓 / Android / 阳光沙滩 / B站 / 自定义View
[文章] android 开发工具类-毛玻璃,高斯模糊效果
importandroid.renderscript.RenderScript;importandroid.renderscript.ScriptIntrinsicBlur;importandroid.widget.ImageView
[问答] 这个红包雨效果怎么实现
有三种红包,每种的个数固定,每种红包飞行速度不同,每次聚宝盆发射时随机产生某一种红包实现这个效果涉及到很多步骤,我现在遇到两个问题1.怎么生成这么多ImageView2.位移动画的路径的算法如果有类似例子可以发给我链接
2020-04-03 16:52 · 动画
[文章] 如何自己封装高效解析和生成二维码的工具类
importandroid.graphics.Color;importandroid.graphics.drawable.BitmapDrawable;importandroid.util.Log;importandroid.widget.ImageView
2020-12-17 09:55 · 二维码 / ZXing / 安卓 / Android / 工具类 / Java / 解析 / 生成 / 谷歌
[问答] android写轮播图代码没问题,运行起来啥也不显示
match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView
[问答] 属性动画中的透明度动画
imageView_Temper.animate().alpha(0.0f).setDuration(5000);图片的确会变得透明,但并没有渐变透明,怎么回事,又该怎么做?
2020-03-10 17:34 · Android / 属性动画
[文章] Android 动画切换背景图片的坑与修复
背景组件就是我们熟悉的imageview,然后通过一些图片加载框架给他上图片。实际上应该怎么操作呢。
2022-07-18 17:23 · Android / glide / 动画切换背景
[问答] Recycleview 多种条目类型 如何绑定数据
privatefinalImageViewmImage;publicType1Holder(@NonNullViewitemView){super(itemView);mImage=itemView.findViewById(R.id.imageView
2020-05-09 09:05 · 安卓
[文章] 安卓开发中如何调用相机拍照并返回呢?
importandroid.support.v7.app.AppCompatActivity;importandroid.view.View;importandroid.widget.Button;importandroid.widget.ImageView
2019-08-30 23:13 · 安卓 / android / 相机 / 开发教程 / 例子
[问答] 自己在一个Fragment里面加了一个banner使用的是youth.banner,但是一运行就报空指针异常
//自定义的图片加载器privateinnerclassMyLoader:ImageLoader(){overridefundisplayImage(context:Context,path:Any,imageView
2020-08-11 20:50 · kotlin / fragment / 空指针
[问答] 旋转动画就近旋转

用这个imageview.animate().rotation(),怎么才能跨越 0f 和 360f 就近旋转,就是比如旋转角度是(0f,30f,60f,90f,120f,150f,180f,210f

2022-03-23 17:44 · android / 旋转动画 / ImageView
[问答] 在读取系统文件的时候,明明已经是授予权限了,但还是显示没有权限
importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.ImageView
2020-02-11 22:33 · Android权限
[问答] Glide加载多张图片

如题,有三个ImageView,想利用Glide加载三张图片,除了将这段代码写三遍,有其他办法吗?

2022-03-22 11:34 · glide
[问答] Android 视频图片播放demo疑问
视频可以用videoView,图片可以用ImageView。但是这个点击选择我应该咋处理?
2020-09-03 09:50 · Android
  • 1
  • 2
  • 3
  • 4