android 怎么用getwallpaper方法

android 怎么用getwallpaper方法,第1张

本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理大家按步骤一步一步来:

第一步:新建一个Android工程命名为ImageDemo,工程结构如下:

第二步:新建一个java文件,命名为ImageUtiljava,在里面定义一些处理方法,代码如下:

package comandroidtutor;

import androidgraphicsBitmap;

import androidgraphicsCanvas;

import androidgraphicsLinearGradient;

import androidgraphicsMatrix;

import androidgraphicsPaint;

import androidgraphicsPixelFormat;

import androidgraphicsPorterDuffXfermode;

import androidgraphicsRect;

import androidgraphicsRectF;

import androidgraphicsBitmapConfig;

import androidgraphicsPorterDuffMode;

import androidgraphicsShaderTileMode;

import androidgraphicsdrawableDrawable;

public class ImageUtil {

//放大缩小

public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){

int width = bitmapgetWidth();

int height = bitmapgetHeight();

Matrix matrix = new Matrix();

float scaleWidht = ((float)w / width);

float scaleHeight = ((float)h / height);

matrixpostScale(scaleWidht, scaleHeight);

Bitmap newbmp = BitmapcreateBitmap(bitmap, 0, 0, width, height, matrix, true);

return newbmp;

}

//将Drawable转化为Bitmap

public static Bitmap drawableToBitmap(Drawable drawable){

int width = drawablegetIntrinsicWidth();

int height = drawablegetIntrinsicHeight();

Bitmap bitmap = BitmapcreateBitmap(width, height,

drawablegetOpacity() != PixelFormatOPAQUE BitmapConfigARGB_8888

: BitmapConfigRGB_565);

Canvas canvas = new Canvas(bitmap);

drawablesetBounds(0,0,width,height);

drawabledraw(canvas);

return bitmap;

}

//获得圆角的方法

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){

Bitmap output = BitmapcreateBitmap(bitmapgetWidth(), bitmap

getHeight(), ConfigARGB_8888);

Canvas canvas = new Canvas(output);

final int color = 0xff424242;

final Paint paint = new Paint();

final Rect rect = new Rect(0, 0, bitmapgetWidth(), bitmapgetHeight());

final RectF rectF = new RectF(rect);

paintsetAntiAlias(true);

canvasdrawARGB(0, 0, 0, 0);

paintsetColor(color);

canvasdrawRoundRect(rectF, roundPx, roundPx, paint);

paintsetXfermode(new PorterDuffXfermode(ModeSRC_IN));

canvasdrawBitmap(bitmap, rect, rect, paint);

return output;

}

//获得带倒影的方法

public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){

final int reflectionGap = 4;

int width = bitmapgetWidth();

int height = bitmapgetHeight();

Matrix matrix = new Matrix();

matrixpreScale(1, -1);

Bitmap reflectionImage = BitmapcreateBitmap(bitmap,

0, height/2, width, height/2, matrix, false);

Bitmap bitmapWithReflection = BitmapcreateBitmap(width, (height + height/2), ConfigARGB_8888);

Canvas canvas = new Canvas(bitmapWithReflection);

canvasdrawBitmap(bitmap, 0, 0, null);

Paint deafalutPaint = new Paint();

canvasdrawRect(0, height,width,height + reflectionGap,

deafalutPaint);

canvasdrawBitmap(reflectionImage, 0, height + reflectionGap, null);

Paint paint = new Paint();

LinearGradient shader = new LinearGradient(0,

bitmapgetHeight(), 0, bitmapWithReflectiongetHeight()

+ reflectionGap, 0x70ffffff, 0x00ffffff, TileModeCLAMP);

paintsetShader(shader);

// Set the Transfer mode to be porter duff and destination in

paintsetXfermode(new PorterDuffXfermode(ModeDST_IN));

// Draw a rectangle using the paint with our linear gradient

canvasdrawRect(0, height, width, bitmapWithReflectiongetHeight()

+ reflectionGap, paint);

return bitmapWithReflection;

}

}

第三步:修改mainxml布局文件,主要放了两个ImageView控件

第四步:修改主核心程序,ImageDemojava,

package comandroidtutor;

import androidappActivity;

import androidgraphicsBitmap;

import androidgraphicsdrawableDrawable;

import androidosBundle;

import androidwidgetImageView;

public class Imagedemo extends Activity {

private ImageView mImageView01,mImageView02;

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

setupViews();

}

private void setupViews(){

mImageView01 = (ImageView)findViewById(Ridimage01);

mImageView02 = (ImageView)findViewById(Ridimage02);

//获取壁纸返回值是Drawable

Drawable drawable = getWallpaper();

//将Drawable转化为Bitmap

Bitmap bitmap = ImageUtildrawableToBitmap(drawable);

//缩放

Bitmap zoomBitmap = ImageUtilzoomBitmap(bitmap, 100, 100);

//获取圆角

Bitmap roundBitmap = ImageUtilgetRoundedCornerBitmap(zoomBitmap, 100f);

//获取倒影

Bitmap reflectBitmap = ImageUtilcreateReflectionImageWithOrigin(zoomBitmap);

//这里可以让Bitmap再转化为Drawable

//     Drawable roundDrawable = new BitmapDrawable(roundBitmap);

//     Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);

//     mImageView01setBackgroundDrawable(roundDrawable);

//     mImageView02setBackgroundDrawable(reflectDrawable);

mImageView01setImageBitmap(roundBitmap);

mImageView02setImageBitmap(reflectBitmap);

}

Bitmap是Android系统中的图像处理的最重要的类之一。用它可以获取图像文件信息,对图像进行旋转,剪切,放大,缩小等 *** 作。

Bitmap代表一张位图,使我们在开发中常用的资源,下面就对Bitmap进行简单的介绍。

Bitmap的获取方法:

1、使用BitmapDrawable

    BitmapDrawable里封装的就是一个Bitmap对象,我们要把Bitmap包装成BitmapDrawable对象,可以调用BitmapDrawable的构造方法:

BItmapDrawbale drawable = new BItmapDrawable(bitmap);

如果要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap()方法:

Bitmap bitmap = drawbalegetBitmap();

2、Bitmap提供了一些静态方法来创建Bitmap对象(仅列举几个):

    createBitmap(Bitmap source,int x,int y,int width,int height):从原位图source的指定坐标(x,y)开始,从中挖取宽width,高heigtht的一块出来,创建新的Bitmap对象。

createScaledBitmap(Bitmap source,int width,ing height,boolean fliter):对源位图进行缩放,缩放称宽width,高heigth的新位图。

createBitmap(int width,int height,BitmapConfig config):创建一个宽width,高height的可变的新位图。

createBitmap(Bitmap source, int x,int y,int width,int height ,Matrix m,boolean fliter):从源位图source的指定坐标(x,y)开始,挖取宽width,高height的一块来,创建新的Bitmap对象,并按照Matrix指定的规则进行变换。

3、通过对资源文件的解析获取Bitmap对象

    在这里就要用到BitmapFactory这个工具类,提供的方法如下:

decodeByteArray(byte[] data, int offset,int length):从指定字节数组的offset位置开始,将长度为length的字节数据解析成Bitmap对象。

decodeFIle(String pathName):从pathName指定的文件中解析、创建Bitmap对象。

decodeFileDescriptor(FileDescriptor fd):用于从FileDescriptor对应的文件中解析、创建Bitmap对象。

decodeResource(Resource res,int id):用于根据给定的资源ID从指定的资源文件中解析、创建Bitmap对象。

decodeStream(InputStream is):用于从指定输入流中介解析、创建Bitmap对象。

但是,在系统不断的解析、创建Bitmap的过程中,可能会由于内存小或其他原因,导致程序运行时发生OutOfMemory错误。

为此,Android为Bitmap提供了内存回收方法:

void recycle():强制回收Bitmap对象。

还有用于判断Bitmap 对象是否被回收的方法:

boolean isRecycle();

如果Android应用需要访问系统相册,都需要借助BitmapFactory解析、创建Bitmap对象。

4 从安卓无忧中看bitmap的几种例子,下面是加载bitmap的例子,可以看里面的源码:

如果您对答案满意,请您关注一下名字中微博。

方法/步骤

1

如下图所示,需要根据URL地址获取加载到图中Anroid机器人所在的位置,这是运行前的效果:

2

首先需根据URL地址获取,如下所示,urladdr即为地址,返回Drawable对象:

//download image from network using @urladdress

private Drawable loadImageFromNetwork(String urladdr) {

// TODO Auto-generated method stub

Drawable drawable = null;

try{

//judge if has picture locate or not according to filename

drawable = DrawablecreateFromStream(new URL(urladdr)openStream(), "imagejpg");

}catch(IOException e){

Logd("test",egetMessage());

}

if(drawable == null){

Logd("test","null drawable");

}else{

Logd("test","not null drawable");

}

return drawable;

}

3

获取到后,需要更新主线程UI资源,考虑到时间以及界面反应延迟等,所以采用线程加以处理,如下图所示:

// image

new Thread(new Runnable(){

Drawable drawable = loadImageFromNetwork(urladdress);

@Override

public void run(){

//post() is quite important,update pictures in UI main thread

imagepost(new Runnable(){

@Override

public void run(){

//TODO Auto-generated method stub

imagesetImageDrawable(drawable);

}

});

}

//download image from network using @urladdress

private Drawable loadImageFromNetwork(String urladdr) {

// 略(如 1 中所示)

}

})start(); //线程启动

4

说明:在上述示例代码中,image是ImageView类的一个对象,也就是APP中的一个显示图像组件,利用获取到的drawable去更新image,运行效果如下所示:

Bitmap bmp=BitmapFactorydecodeResource(r, Rdrawableicon);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

bmpcompress(BitmapCompressFormatPNG, 100, baos);

baostoByteArray();

希望你能帮到你

使用ImageLoader

源码地址

>

android 将drawable中的保存到系统相册中的原理比较简单,获取到的bitmap,然后通过的compress方法写到一个fileoutputstream中 再通知MediaScannerService有文件加入就可以了

保存的核心代码如下:

Bitmap bitmap= BitmapFactorydecodeResource(getResources(), Rdrawableicon);

MediaStoreImagesMediainsertImage(contextgetContentResolver(), bitmap, name, "");

或者

FileOutputStream fos = openFileOutput("image", ContextMODE_PRIVATE);

bitmapcompress(BitmapCompressFormatJPEG, 100, fos);

fosflush();

fosclose();

//发送系统通知消息

contextsendBroadcast(new Intent(IntentACTION_MEDIA_MOUNTED, Uriparse("file://" + EnvironmentgetExternalStorageDirectory())));

另一种方法是直接使用文件流读写:

InputStream is = mContextgetResources()openRawResource(PicID);

FileOutputStream fos = new FileOutputStream(LogoFilePath);

byte[] buffer = new byte[8192];

int count = 0;

while((count=isread(buffer)) > 0)

{

foswrite(buffer, 0, count);

}

fosclose();

isclose();

这里要注意目录权限问题:在应用程序AndroidManifestxml中的manifest节点中加入android:sharedUerId="androiduidsystem"这个属性。然后放在源码环境中编译,并通过adb install 的方式进行安装。mk文件中的属性改为LOCAL_CERTIFICATE :=platform。

在ImageView中的image,可以使用getWidth()和getHeight()来获取宽度和高度,但是获得的image宽度和高度不是很精确的;对于背景,你首先要获取背景的Drawable对象,然后将Drawable对象转换为BitmapDrawable,这样你就可以将背景作为Bitmap对象并获取其宽度和高度了。代码如下:Bitmap b = ((BitmapDrawble)imageViewgetBackground())getBitmap(); int w = bgetWidth(); int h = bgetHeight(); or do like this wayimageViewsetDrawingCacheEnabled(true); Bitmap b = imageViewgetDrawingCache(); int w = bgetWidth(); int h = bgetHeight(); 或者也可以像下面这样:imageViewsetDrawingCacheEnabled(true); Bitmap b = imageViewgetDrawingCache(); int w = bgetWidth(); int h = bgetHeight(); 上面的代码仅仅可以为你获取当前ImageView的大小:imageViewgetWidth(); imageViewgetHeight(); 如果你要获取Drawable image对象的大小,可用如下代码:Drawable d = getResources()getDrawable(Rdrawableyourimage); int h = dgetIntrinsicHeight(); int w = dgetIntrinsicWidth();

以上就是关于android 怎么用getwallpaper方法全部的内容,包括:android 怎么用getwallpaper方法、怎么给bitmap赋值 android、android中怎么跳转到相册获取照片并得到url等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9750512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存