问题
I am still can't find the way to set wallpaper that the image getting from ImageView. Anyone can show me the way to set phone wallpaper from android ImageView?
Here is my code:
ImageView Layout:
<ImageView
android:contentDescription="My Wallpaper"
android:id="@+id/full_image_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:saveEnabled="true"
/>
Activity on Image View
Please noted that the image that showing in FullImageActivity
is getting from image GridView
after user clicked on item.
public class FullImageActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.full_image);
// get intent data
Intent i = getIntent();
// Selected image id
int position = i.getExtras().getInt("id");
ImageAdapter imageAdapter = new ImageAdapter(this);
ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
imageView.setImageResource(imageAdapter.mThumbIds[position]);
}
}
I want to set wallpaper from image in above activity after user touch on screen i will popup to ask user whether they want to set it as wallpaper or not.
回答1:
I've posted my code whatever i'm using in my application. I've also take the image from GridView
and, when anyone of the image is being selected. That'll set as wallpaper.
But, my code seems just different. I never used any ImageView
MainActivity.this
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
ImageAdapter i = (ImageAdapter)parent.getAdapter();
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),(int)i.getItemId(position));
WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
try {
myWallpaperManager.setBitmap(mBitmap);
Toast.makeText(MainActivity.this, "Wallpaper set", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(MainActivity.this, "Error setting wallpaper", Toast.LENGTH_SHORT).show();
}
}
});
}
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return mFullSizeIds[position];
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(300, 250));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
// references to our images
private Integer[] mThumbIds = {
R.drawable.wallpaper1t,
R.drawable.wallpaper2t,
R.drawable.wallpaper3t,
R.drawable.wallpaper4t,
R.drawable.wallpaper5t,
R.drawable.wallpaper6t,
R.drawable.wallpaper7t,
R.drawable.wallpaper8t
};
private Integer[] mFullSizeIds = {
R.drawable.wallpaper1,
R.drawable.wallpaper2,
R.drawable.wallpaper3,
R.drawable.wallpaper4,
R.drawable.wallpaper5,
R.drawable.wallpaper6,
R.drawable.wallpaper7,
R.drawable.wallpaper8
};
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"/>
Maybe, this can be helps you lot.
回答2:
You need to create a bitmap then set it as the wallpaper
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), IMAGE_ID);
WallpaperManager myWallpaperManager = WallpaperManager
.getInstance(getApplicationContext());
try {
myWallpaperManager.setBitmap(mBitmap);
Toast.makeText(SetWallPaper.this, "Wallpaper set",
Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(SetWallPaper.this,
"Error setting wallpaper", Toast.LENGTH_SHORT)
.show();
}
Where IMAGE_ID is the resource ID of your drawable, e.g. R.drawable.imagename
来源:https://stackoverflow.com/questions/10978442/how-to-set-wallpaper-from-imageview