这个demo演示了如何为手机设置壁纸,对于壁纸的管理使用WallpaperManager类。
本例实现的思路是:取出当前壁纸,并显示在imageView当中,使用PorterDuff.Mode.MULTIPLY颜色混合模式,随机从几个颜色中抽取一种,与原来的壁纸进行颜色混合,再将修改后的图像设置成壁纸。
activity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal">
<Button
android:id="@+id/bt_randomize"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Randomize"/>
<Button
android:id="@+id/bt_set_wallpaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set Wallpaper"/>
</LinearLayout>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"/>
</LinearLayout>
MainActivity
public class MainActivity extends Activity {
private Button bt_randomize, bt_set_wallpaper;
private ImageView imageView;
private int[] mColors = new int[] { Color.BLUE, Color.GREEN, Color.RED,
Color.LTGRAY, Color.MAGENTA, Color.CYAN, Color.YELLOW, Color.WHITE };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_randomize = (Button) findViewById(R.id.bt_randomize);
bt_set_wallpaper = (Button) findViewById(R.id.bt_set_wallpaper);
imageView = (ImageView) findViewById(R.id.imageView);
// 获取壁纸管理器的实例
final WallpaperManager wm = WallpaperManager.getInstance(this);
// 获取到当前壁纸的drawable对象
final Drawable wallpaperDrawable = wm.getDrawable();
// 在imageView显示当前壁纸
imageView.setImageDrawable(wallpaperDrawable);
// 将imageView转换成bitmap图像
imageView.setDrawingCacheEnabled(true);
bt_randomize.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Math.floor取最接近于某个浮点数的整数,小于等于该浮点数
// 随机选取某一颜色的序列号
int color = (int) Math.floor(Math.random() * mColors.length);
// 设置颜色滤镜,第一个参数表示颜色,第二个参数表示混合模式
wallpaperDrawable.setColorFilter(mColors[color],
PorterDuff.Mode.MULTIPLY);
//重新设置修改后的图像
imageView.setImageDrawable(wallpaperDrawable);
//更新imageView
imageView.invalidate();
}
});
bt_set_wallpaper.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//取出bitmap图像
Bitmap bitmap=imageView.getDrawingCache();
try {
//重新设置背景
wm.setBitmap(bitmap);
finish();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
需要在配置文件中添加设置壁纸的权限:
<uses-permission android:name="android.permission.SET_WALLPAPER"/>