drawble 的使用
来源:互联网 发布:js 添加dom 动画 编辑:程序博客网 时间:2024/06/05 03:42
在实际需求中 遇到 要实现这样的效果
这样的效果,一个带有渐变效果的文案和文字 和图片,当文字的数量超过一行的效果为:
实现的思路 是将 高档型 和品牌秀这几个图标作为ImageSpan 在TextView 显示的时候作为占位符置换
具体的实现代码为:
private void refreshHotelName(HotelDetailCacheBean cacheBean) { Drawable medalDrawable = null; mHotelNameText.setCompoundDrawables(null, null, null, null); mHotelNameText.setMaxLines(3); mHotelNameText.setSingleLine(false); HotelBasicInfoEntityModel hotelBasicInfoModel = cacheBean.hotelBasicInfoModel; int medalValue = getMedalType(hotelBasicInfoModel); if (medalValue > 0) { int drawableID = HotelConstant.sMedalTypeResIds.get(medalValue); mResource = mFragment.getResources(); medalDrawable = mResource.getDrawable(drawableID); } Drawable sellerDrawable = mFragment.getResources().getDrawable(R.drawable.hotel_icon_show); Drawable hotelTypeDrawable = LayoutToDrawable(cacheBean); SpannableStringBuilder span = new SpannableStringBuilder(); String hotelTypeTag = "✹"; String medalTag = "●"; String sellerTag = "★"; String hotelName = cacheBean.hotelBasicInfoModel.hotelName.trim(); String star = HotelUtils.getHotelShowStarShort(cacheBean.hotelDataType, cacheBean.hotelActiveInfoModel.isLicenseStar, cacheBean.hotelActiveInfoModel.starEType.getValue(),true).trim(); if (!StringUtil.emptyOrNull(star)) { span.append(hotelTypeTag); span.append(" "); } span.append(hotelName); if (medalDrawable != null) { span.append(" "); span.append(medalTag); } if (!StringUtil.emptyOrNull(cacheBean.hotelBasicInfoModel.sellerShowUrl)) { span.append(" "); span.append(sellerTag); } Pattern hotelTypePattern = Pattern.compile(hotelTypeTag); Matcher hotelTypeMatcher = hotelTypePattern.matcher(span); while (hotelTypeDrawable != null && hotelTypeMatcher.find()) { hotelTypeDrawable.setBounds(0, 0, (int) drableWidth, DeviceInfoUtil.getPixelFromDip(16)); span.setSpan(new HotelImageSpan(hotelTypeDrawable), hotelTypeMatcher.start(), hotelTypeMatcher.end(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); } Pattern pattern = Pattern.compile(medalTag); Matcher matcher = pattern.matcher(span); while (medalDrawable != null && matcher.find()) { medalDrawable.setBounds(0, 0, DeviceInfoUtil.getPixelFromDip(16), DeviceInfoUtil.getPixelFromDip(16)); span.setSpan(new HotelImageSpan(medalDrawable), matcher.start(), matcher.end(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); } Pattern patternSeller = Pattern.compile(sellerTag); Matcher matcherSeller = patternSeller.matcher(span); while (sellerDrawable != null && matcherSeller.find()) { sellerDrawable.setBounds(0, 0, DeviceInfoUtil.getPixelFromDip(16), DeviceInfoUtil.getPixelFromDip(16)); span.setSpan(new HotelImageSpan(sellerDrawable), matcherSeller.start(), matcherSeller.end(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); } mHotelNameText.setText(span); }
对于 高档型这个文案 的处理思路是将TextView 转换drawable
实现代码如下
public Drawable LayoutToDrawable(HotelDetailCacheBean cacheBean) { LayoutInflater inflator = CtripBaseApplication.getInstance().getCurrentActivity().getLayoutInflater(); View viewHelp = inflator.inflate(R.layout.hotel_detail_high_star_style_layout, null); TextView textView = (TextView) viewHelp.findViewById(R.id.hotel_type); String star = HotelUtils.getHotelShowStarShort(cacheBean.hotelDataType, cacheBean.hotelActiveInfoModel.isLicenseStar, cacheBean.hotelActiveInfoModel.starEType.getValue(),true).trim(); if (!StringUtil.emptyOrNull(star)) { textView.setText(star); } Bitmap snapshot = convertViewToBitmap(textView); Drawable drawable = new BitmapDrawable(snapshot); return drawable; } public static Bitmap convertViewToBitmap(TextView view) { view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); drableWidth = view.getPaint().measureText(view.getText().toString()); view.layout(0, 0, (int) drableWidth + 8, view.getMeasuredHeight()); //根据字符串的长度显示view的宽度 view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; }
2 在实际项目中,有时候想让图片等比拉伸,大部分人会想着imageView 的setScrtype FitXY 在源码中的
private void configureBounds() { //通过src生成的Drawable实例 原始宽高 final int dwidth = mDrawableWidth; final int dheight = mDrawableHeight; //ImageView实例的内容区域宽高(去除了padding值) final int vwidth = getWidth() - mPaddingLeft - mPaddingRight; final int vheight = getHeight() - mPaddingTop - mPaddingBottom; **** if (dwidth <= 0 || dheight <= 0 || ScaleType.FIT_XY == mScaleType) { //当ImageView设置过android:scaleType="fitXY" 或setScaleType(ScaleType.FIT_XY), //则将此Drawable实例的绘制范围设定为ImageView实例的内容区域 mDrawable.setBounds(0, 0, vwidth, vheight); mDrawMatrix = null; } else { //对应我们例子中,未设置android:scaleType情况下, //通过src生成的Drawable实例的绘制范围就是其原始范围 mDrawable.setBounds(0, 0, dwidth, dheight); //下面代码设置了mDrawMatrix的属性 //在initImageView()方法中已知: //ImageView中mScaleType默认就是ScaleType.FIT_CENTER if (ScaleType.MATRIX == mScaleType) { **** } else if (fits) { **** } else if (ScaleType.CENTER == mScaleType) { **** } else if (ScaleType.CENTER_CROP == mScaleType) { **** } else if (ScaleType.CENTER_INSIDE == mScaleType) { **** } else { //ImageView中mScaleType默认就是ScaleType.FIT_CENTER //则根据ImageView实例内容区域的范围和Drawable实例实际宽高来设置mDrawMatrix mTempSrc.set(0, 0, dwidth, dheight); mTempDst.set(0, 0, vwidth, vheight); mDrawMatrix = mMatrix; mDrawMatrix.setRectToRect(mTempSrc, mTempDst, scaleTypeToScaleToFit(mScaleType)); } } }}
在fitly 是按照控件的宽和高 拉伸 会变型,解决方案
ImageLoader.getInstance().loadImage(imageUrl, new ImageLoadingListener() { @Override public void onLoadingStarted(String s, View view) { } @Override public void onLoadingFailed(String s, View view, FailReason failReason) { } @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { if (bitmap != null && !bitmap.isRecycled()) { int width = CtripAppController.getWindowWidth(); int btWitdth = bitmap.getWidth(); int btHeight = bitmap.getHeight(); int height = (width * btHeight) / btWitdth; RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height); mImageView.setLayoutParams(params); mImageView.setImageBitmap(bitmap); } } @Override public void onLoadingCancelled(String s, View view) { } });
按照手机屏幕的比例拉伸
参考资料
http://www.jianshu.com/p/384a70897ba6
阅读全文
0 0
- drawble 的使用
- Android 资源的使用之Drawble使用
- drawble和bitmap的区别
- 使用Drawble文件实现圆角,填充颜色,边框等属性的设置(Android)
- Drawble和Bitmap之间的转换
- android 把bitmap转成drawble后宽高不一致的解决方法
- android 把bitmap转成drawble后宽高不一致的解决方法
- android 把bitmap转成drawble后宽高不一致的解决方法
- 如何自定义更改bitmap 或者drawble的宽和高
- 关于drawble文件夹和mipmap文件夹下的图片
- 自定义Drawble
- Android Drawble
- Android:Bitmap->Drawble->Byte[]
- 关于Drawble 和Bitmap
- 自定义Drawble-Xml
- drawble用法总结
- Drawble高效创建缩略图方法
- res下五个drawble文件夹
- H5开发:阿里云虚拟主机子目录如何绑定二级域名
- InetAddress & InetSocketAddress
- 51nod 1202 子序列个数
- c++实验6-矩阵求和
- HTML5废弃的iframe有哪些缺点?
- drawble 的使用
- android常见三个适配器
- 网络图片浏览器——HttpURLConnection
- BeanShell 简介与学习(一篇就够)
- 比较版本号的大小 新旧
- 捕获程序崩溃异常
- 计算机与操作系统基础-计算机发展史
- 双线性插值
- 项目风险管理脉络