Android开发学习之设置Android壁纸的功能实现
16lz
2021-01-23
今天和大家分享的是关于在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 stubthis.myContext=c;this.myImages=Images;}//返回所有的图片总数量@Overridepublic int getCount() {return this.myImages.length;}//利用getItem方法,取得目前容器中图像的数组ID@Overridepublic Object getItem(int position){return position;}@Overridepublic long getItemId(int position){return position;}//取得目前欲显示的图像的VIEW,传入数组ID值使之读取与成像@Overridepublic 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;@Overrideprotected 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(){@Overridepublic 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(){@Overridepublic void onClick(View arg0) {SetWallPaper();}});ImageAdapter mAdapter=new ImageAdapter(this,Resources);mGallery.setAdapter(mAdapter);mGallery.setOnItemSelectedListener(new OnItemSelectedListener(){@Overridepublic void onItemSelected(AdapterView<?> Adapter, View view,int position, long id){//设置图片mSwitcher.setImageResource(Resources[position]);//获取当前图片索引index=position;}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {}}); }//设置壁纸 public void SetWallPaper() { WallpaperManager mWallManager=WallpaperManager.getInstance(this); try {mWallManager.setResource(Resources[index]);} catch (IOException e) {e.printStackTrace();} } @Overridepublic boolean onCreateOptionsMenu(Menu menu) {return true;}}可以看到,在使用ImageSwitcher的时候,我们需要实现它的工厂接口,并且这里的makeView()方法和BaseAdapter里的getView()方法是一样的,即返回一个View视图。我们ImageSwitcher给使用了系统默认的动画效果。最终运行效果如下:
V粉不解释,哈哈!
更多相关文章
- 我的Android进阶之旅------>Ubuntu下不能识别Android设备的解决
- 动态修改Android参数信息的方法绕过改机检测
- android 横竖屏限制的配置方法
- Android file.createNewFile方法问题总结
- Android应用程序全屏显示的方法
- Android 实现模拟按键方法