很多开发者表示,不知道Android的Drawable和Bitmap之间如何相关转换。下面Android123给大家两种比较简单高效的方法。
一、Bitmap转Drawable
Bitmap bm=xxx; //xxx根据你的情况获取
BitmapDrawable bd=BitmapDrawable(bm);
Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
二、 Drawable转Bitmap
转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。
Drawable d=xxx; //xxx根据自己的情况获取drawable
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap bm = bd.getBitmap();
最终bm就是我们需要的Bitmap对象了。
Hv a rest at first~
相信大家都了解android tab架构,在这里不多说。
假设对于tab有这样的需求,你会提出怎样的呢?
一堆tabs,每个tab中又有多个view来显示数据,可以在tabs以及views之间相互跳转,回退。
让我们来一步步分析这个需求:
- 一堆tabs,我把他们看作是一排抽屉。
- 每个tab中又有多个view来显示数据,你会怎样让tab来管理这么多views呢?有人会想到频繁的更换layout来表现不同的视图,这样的代价是不是有些大呢,我想到的是FrameLayout,你可以把它们看作是卡片,放在抽屉里,每次打开抽屉能看到最上面的view,是不是很轻松呢,假如用第一个方案你可以想象是什么场景。
- 可以在tabs以及views之间相互跳转,回退,喔,酷啊,魔法世界出现了,当你触碰卡片,下一个抽屉或卡片会自动蹦出来,不可思议,最好找一个魔法师来做这些事情,当然还需要一种魔咒来驱动魔法显灵。
好了到这里,一个场景出现了,一个魔法师挥舞着魔法棒指挥抽屉和卡片,我认为这样是合理的,你认为呢?
Sorry,故事扯远了,我们还是得现实一些,你们会想到怎样抽象这些对象呢?我是这样做的:
- 抽屉:暂且命名为TabContentActivity (我用的是Intent的方式创建的tab)。
- 一叠卡片:我想用ViewAnimator,还可以有动画,一举两得。
- 魔法师:暂且定义一个类来表示他,NavigationManager。
- 魔咒:我想用URI表示,比如action://{which tab?}/{which view?},给每个tab和view都命名一个tag。
接下来我们就研究一下他们结构。
另外一种做法就是将ViewAnimator的管理责任交由TabContentActivity,我先姑且像上图一样实现。但但是,我发现了一个问题,如果想上图那样实现,TabContentActivity将会承担很多View要处理的任务,比如监听按钮事件等,这样会让TabContentActivity很臃肿,哎,那就扩展吧,让View的控制权私奔,架空TabContentActivity,引入ViewController。扩展后是这个样子滴:
是不是感觉好一点儿?我偷偷加了一个ViewStack,接替ViewAnimator的位置。
转自:http://c.gzl.name/archives/305
Three20,320库真是好的不得了,都不知道该怎么夸它了,我在自己的佛历View中就使用了其中一个TTView,非常漂亮简单的风格。再也不用考虑是不是在UILabel下面放一个UIImageView等等… 而且还要自己弄图片的大小
在TTCatalog中展示了14种TTView的style,不知道你喜欢哪一个呢?
**我想我用的是第二个吧~
/*******************************************************************/
看看我的代码吧~
UIColor* blue = RGBCOLOR(191, 197, 208); TTStyle *myStyle = [TTShapeStyle styleWithShape:[TTRoundedRectangleShape shapeWithRadius:10] next:[TTShadowStyle styleWithColor:RGBACOLOR(255,255,255,0.9) blur:1 offset:CGSizeMake(0, 1) next:[TTLinearGradientFillStyle styleWithColor1:RGBCOLOR(255, 255, 255) color2:RGBCOLOR(216, 221, 231) next:[TTSolidBorderStyle styleWithColor:blue width:1 next:nil]]]]; viewA = [[[TTView alloc] initWithFrame:CGRectMake(10, 220, 300, 40)] autorelease]; viewB = [[[TTView alloc] initWithFrame:CGRectMake(10, 263, 300, 40)] autorelease]; viewC = [[[TTView alloc] initWithFrame:CGRectMake(10, 306, 300, 100)] autorelease]; viewA.backgroundColor = self.view.backgroundColor; viewB.backgroundColor = self.view.backgroundColor; viewC.backgroundColor = self.view.backgroundColor; viewA.style = myStyle; viewB.style = myStyle; viewC.style = myStyle; [self.view addSubview:viewA]; [self.view addSubview:viewB]; [self.view addSubview:viewC];
我一共需要三个框子,而style那个部分其实是完全照抄TTCatalog的(人懒也不是罪过)
但是需要注意一下事项:
1,必须要设置self的backgroundColor, 然后再赋值给TTView, 否则缺省值会变成黑色…
2, 记得release掉那些TTView,我使用的autorelease,因为superView会retain那些对象的~
3,在使用UILabel的时候,如果想设置UILabel为透明,只需要设置UILabel.backgroundColor为[UIColor clearColor]就可以拉,这样就不会让UILabel弄出一个窟窿来咯~
快去下载320库来试试阿!