最近总算有空了,可以写一下之前自己学习bmob的一些收获,延续上篇的工作展开说明。
上一篇我们实现了瀑布流,进一步的我们又想实现图片加文字卡片式的瀑布形式,由于自己是第一次涉及,初次想到了用画布的形式实现,当然还有其他更高级的方法可以更加完美的实现,但本文不做深入研究,仅说明自己的实现方法,方法比较笨,请见谅。用画布的形式实现比较简单,虽然比较简陋,先来一张效果图:
实现的形式简单粗暴,具体用到了canvas的图像拼接,文字添加这两块知识。具体实现过程如下:
首先从bmob服务器获得图片以瀑布流形式实现,获取一张图片的尺寸大小,
int width =response.getWidth(), hight =response.getHeight();
System.out.println("宽"+width+"高"+hight);
再重新绘制一张画布:
Bitmap icon=Bitmap.createBitmap(response.getWidth(),response.getHeight()+114, Bitmap.Config.ARGB_8888); //建立一个空的BItMap
Canvas canvas = new Canvas(icon);//初始化画布绘制的图像到icon上
这里高度大小自己定为了 “response.getHeight()+114”,宽度不变,跟获取的图片宽度一致。
然后将获取的图片先画入画布:
Paint photoPaint = new Paint(); //建立画笔
photoPaint.setDither(true); //获取跟清晰的图像采样
photoPaint.setFilterBitmap(true);//过滤一些
Rect src = new Rect(0, 0, response.getWidth(),response.getHeight());//创建一个指定的新矩形的坐标
Rect dst = new Rect(0, 0, width, hight);//创建一个指定的新矩形的坐标
canvas.drawBitmap(response, src, dst, photoPaint);//将photo 缩放或则扩大到 dst使用的填充区photoPaint
画完服务器的图片,再进行拼接文字的背景图,这里的背景图片直接从本地获取(当然也可以从网络或其他途径获取),获取的图片要转化为bitmap格 式:
Drawable mDrawable=MainActivity1.this.getResources().getDrawable(R.drawable.fenf);
Bitmap mBitmap = ((BitmapDrawable) mDrawable).getBitmap();
之后画入画布:
src = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight());// 截取bmp1中的矩形区域
dst = new Rect(0, hight, width,
response.getHeight()+114);// bmp2在目标画布中的位置
canvas.drawBitmap(mBitmap, src, dst, photoPaint);
最后把文字画入即可:
TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);//设置画笔
textPaint.setTextSize(24.0f);//字体大小
textPaint.setTypeface(Typeface.DEFAULT_BOLD);//采用默认的宽度
textPaint.setColor( Color.WHITE);//采用的颜色 Color.GREEN
//textPaint.setShadowLayer(3f, 1, 1,this.getResources().getColor(android.R.color.background_dark));//阴影的设置
StaticLayout layout = new StaticLayout("『主题』"+str1,textPaint,icon.getWidth(),Alignment.ALIGN_NORMAL,1.0F,0.0F,false);
canvas.translate(0,response.getHeight()+4);
layout.draw(canvas);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
itemImage.setImageBitmap(icon);
以上就是大体步骤。最后仿照上述方法实现了点击这个图片进行阅读的效果,如图:
具体流程就是这样,有问题可以私信本作者,欢迎交流一起学习。接下来的博客作者将写一下基于bmob实现发帖与评论的一些学习心得,会继续努力~!谢谢~