Android开发学习之WallPaper设置壁纸详细介绍与实例
今天和大家分享的是关于在android中设置壁纸的方法,在android中设置壁纸的方法有三种,分别是:
1、使用wallpapermanager的setresource(int resourceid)方法
2、使用wallpapermanager的setbitmap(bitmap bitmap)方法
3、重写contextwrapper 类中提供的setwallpaper()
除此之外,我们还需要在应用程序中加入下列权限: <uses-permission android:name="android.permission.set_wallpaper"/>
下面我们以此为基本方法,来实现android中自带的壁纸应用。首先来看我的布局代码:
<relativelayout xmlns:android="http://schemas.android.com/apk/res/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" >
<imageswitcher
android:id="@+id/imageswitcher"
android:layout_width="fill_parent"
android:layout_height="370dp">
</imageswitcher>
<gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:layout_below="@+id/imageswitcher" />
<button
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" />
</relativelayout>
在这里我们使用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给使用了系统默认的动画效果。最终运行效果如下: