android 壁纸服务,Android开发学习之WallPaper设置壁纸详细介绍与实例

本文详细介绍了在Android中设置壁纸的三种方法:通过WallpaperManager的setResource和setBitmap方法,以及重写ContextWrapper的setWallpaper()。文章通过一个实例展示了如何实现一个简单的壁纸应用,使用Gallery选择图片,点击按钮将其设置为壁纸,同时包含了必要的权限设置和代码实现。

今天和大家分享的是关于在android中设置壁纸的方法,在android中设置壁纸的方法有三种,分别是:

1、使用wallpapermanager的setresource(int resourceid)方法

2、使用wallpapermanager的setbitmap(bitmap bitmap)方法

3、重写contextwrapper 类中提供的setwallpaper()

除此之外,我们还需要在应用程序中加入下列权限:

下面我们以此为基本方法,来实现android中自带的壁纸应用。首先来看我的布局代码:

复制代码 代码如下:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:background="#000000"

tools:context=".mainactivity" >

android:id="@+id/imageswitcher"

android:layout_width="fill_parent"

android:layout_height="370dp">

android:id="@+id/gallery"

android:layout_width="fill_parent"

android:layout_height="80dp"

android:layout_below="@+id/imageswitcher"  />

android:id="@+id/btngo"

android:layout_width="wrap_content"

android:layout_height="40dp"

android:layout_below="@+id/gallery"

android:layout_alignparentbottom="true"

android:layout_centerhorizontal="true"

android:text="@string/btngo" />

在这里我们使用gallery来实现一个可以供用户选择的缩略图列表,当用户选择列表中的图像时,会在imageswitcher控件中显示出当前图像,当点击button时,当前图片将被设置为壁纸。其实这里的imageswitcher完全可以替换为imageview,考虑到imageswitcher可以提供较好的动画效果,所以我们在这里选择了imageswitcher。同样地,我们继续使用android开发学习之gallery中的那个imageadapter类:

复制代码 代码如下:

package com.android.gallery2switcher;

import android.content.context;

import android.view.view;

import android.view.viewgroup;

import android.widget.baseadapter;

import android.widget.imageview;

public class imageadapter extends baseadapter{

//类成员mycontext为context父类

private context mycontext;

private int[] myimages;

//构造函数,有两个参数,即要存储的context和images数组

public imageadapter(context c,int[] images)

{

// todo auto-generated constructor stub

this.mycontext=c;

this.myimages=images;

}

//返回所有的图片总数量

@override

public int getcount()

{

return this.myimages.length;

}

//利用getitem方法,取得目前容器中图像的数组id

@override

public object getitem(int position)

{

return position;

}

@override

public long getitemid(int position)

{

return position;

}

//取得目前欲显示的图像的view,传入数组id值使之读取与成像

@override

public view getview(int position, view convertview, viewgroup parent)

{

imageview image=new imageview(this.mycontext);

image.setimageresource(this.myimages[position]);

image.setscaletype(imageview.scaletype.fit_xy);

image.setadjustviewbounds(true);

return image;

}

}

现在,我们就可以开始编写程序了,后台的代码如下:

复制代码 代码如下:

package com.android.gallery2switcher;

import java.io.ioexception;

import android.os.bundle;

import android.app.activity;

import android.app.wallpapermanager;

import android.view.menu;

import android.view.view;

import android.view.view.onclicklistener;

import android.view.window;

import android.view.animation.animationutils;

import android.widget.adapterview;

import android.widget.adapterview.onitemselectedlistener;

import android.widget.button;

import android.widget.gallery;

import android.widget.gallery.layoutparams;

import android.widget.imageswitcher;

import android.widget.imageview;

import android.widget.viewswitcher.viewfactory;

public class mainactivity extends activity {

gallery mgallery;

imageswitcher mswitcher;

button btngo;

int[] resources=new int[]{r.drawable.image0,r.drawable.image1,r.drawable.image2,r.drawable.image3,

r.drawable.image4,r.drawable.image5,r.drawable.image6,r.drawable.image7,r.drawable.image8};

int index;

@override

protected void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

//不显示标题栏

requestwindowfeature(window.feature_no_title);

setcontentview(r.layout.activity_main);

mgallery=(gallery)findviewbyid(r.id.gallery);

mswitcher=(imageswitcher)findviewbyid(r.id.imageswitcher);

//实现imageswitcher的工厂接口

mswitcher.setfactory(new viewfactory()

{

@override

public view makeview()

{

imageview i = new imageview(mainactivity.this);

i.setbackgroundcolor(0xff000000);

i.setscaletype(imageview.scaletype.fit_center);

i.setlayoutparams(new imageswitcher.layoutparams(layoutparams.match_parent, layoutparams.match_parent));

return i;

}

});

//设置资源

mswitcher.setimageresource(resources[0]);

//设置动画

mswitcher.setinanimation(animationutils.loadanimation(this,android.r.anim.fade_in));

mswitcher.setoutanimation(animationutils.loadanimation(this,android.r.anim.fade_out));

btngo=(button)findviewbyid(r.id.btngo);

btngo.setonclicklistener(new onclicklistener()

{

@override

public void onclick(view arg0)

{

setwallpaper();

}

});

imageadapter madapter=new imageadapter(this,resources);

mgallery.setadapter(madapter);

mgallery.setonitemselectedlistener(new onitemselectedlistener()

{

@override

public void onitemselected(adapterview> adapter, view view,int position, long id)

{

//设置图片

mswitcher.setimageresource(resources[position]);

//获取当前图片索引

index=position;

}

@override

public void onnothingselected(adapterview> arg0)

{

}

});

}

//设置壁纸

public void setwallpaper()

{

wallpapermanager mwallmanager=wallpapermanager.getinstance(this);

try

{

mwallmanager.setresource(resources[index]);

}

catch (ioexception e)

{

e.printstacktrace();

}

}

@override

public boolean oncreateoptionsmenu(menu menu)

{

return true;

}

}

可以看到,在使用imageswitcher的时候,我们需要实现它的工厂接口,并且这里的makeview()方法和baseadapter里的getview()方法是一样的,即返回一个view视图。我们imageswitcher给使用了系统默认的动画效果。最终运行效果如下:

15153R314-0.png

15153RI4-1.png

15153V349-2.png

15153S449-3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值