Wallpaper tutorial - Part 2


SDK Version: 
M3

This article was requested by some of our community members. It is based on the Android Gallery, ImageView Example tutorial by Sasikumar (Part 1 is here). I extended his example with a new function. If you long click on the big image, an alert dialog show up and ask “Do you want to use this image as a wallpaper?". If you click yes, the actually image will be your new wallpaper.

I only changed the Activity class:

  1. package org.androidpeople.gallery;
  2.  
  3. import java.io.IOException;
  4.  
  5. import android.app.Activity;
  6. import android.app.AlertDialog;
  7. import android.content.Context;
  8. import android.content.DialogInterface;
  9. import android.content.res.TypedArray;
  10. import android.graphics.Bitmap;
  11. import android.graphics.BitmapFactory;
  12. import android.os.Bundle;
  13. import android.util.Log;
  14. import android.view.View;
  15. import android.view.ViewGroup;
  16. import android.widget.AdapterView;
  17. import android.widget.BaseAdapter;
  18. import android.widget.Gallery;
  19. import android.widget.ImageView;
  20. import android.widget.AdapterView.OnItemClickListener;
  21.  
  22. public class GalleryExample extends Activity {
  23.  
  24.         private Gallery gallery;
  25.         private ImageView imgView;
  26.         int position;
  27.         private Integer[] Imgid = { R.drawable.a_1, R.drawable.a_2, R.drawable.a_3,
  28.                         R.drawable.a_4, R.drawable.a_5, R.drawable.a_6, R.drawable.a_7 };
  29.  
  30.         @Override
  31.         public void onCreate(Bundle savedInstanceState) {
  32.                 super.onCreate(savedInstanceState);
  33.                 setContentView(R.layout.main);
  34.                 position = 0;
  35.                 imgView = (ImageView) findViewById(R.id.ImageView01);
  36.                 imgView.setImageResource(Imgid[0]);
  37.  
  38.                 gallery = (Gallery) findViewById(R.id.examplegallery);
  39.                 gallery.setAdapter(new AddImgAdp(this));
  40.  
  41.                 gallery.setOnItemClickListener(new OnItemClickListener() {
  42.                         public void onItemClick(AdapterView parent, View v, int position,
  43.                                         long id) {
  44.                                 imgView.setImageResource(Imgid[position]);
  45.                                 GalleryExample.this.position = position;
  46.                         }
  47.                 });
  48.  
  49.  
  50.                 imgView.setOnLongClickListener(new View.OnLongClickListener() {
  51.                         public boolean onLongClick(View v) {
  52.  
  53.                                 AlertDialog alertDialog = new AlertDialog.Builder(
  54.                                                 GalleryExample.this).create();
  55.                                 alertDialog.setTitle("Confirmation");
  56.                                 alertDialog
  57.                                                 .setMessage("Do you want to set this image as wallaper?");
  58.                                 alertDialog.setButton("Yes",
  59.                                                 new DialogInterface.OnClickListener() {
  60.                                                         public void onClick(DialogInterface dialog,
  61.                                                                         int which) {
  62.  
  63.                                                                 Bitmap bitmap = BitmapFactory.decodeResource(
  64.                                                                                 getResources(), Imgid[position]);
  65.                                                                 try {
  66.                                                                         GalleryExample.this.setWallpaper(bitmap);
  67.                                                                 } catch (IOException e) {
  68.                                                                         // TODO Auto-generated catch block
  69.                                                                         e.printStackTrace();
  70.                                                                 }
  71.                                                                 Log.d("Gallery Example", "Image setted.");
  72.  
  73.                                                         }
  74.                                                 });
  75.  
  76.                                 alertDialog.show();
  77.                                 return true;
  78.                         }
  79.                 });
  80.  
  81.         }
  82.  
  83.         public class AddImgAdp extends BaseAdapter {
  84.                 int GalItemBg;
  85.                 private Context cont;
  86.  
  87.                 public AddImgAdp(Context c) {
  88.                         cont = c;
  89.                         TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme);
  90.                         GalItemBg = typArray.getResourceId(
  91.                                         R.styleable.GalleryTheme_android_galleryItemBackground, 0);
  92.                         typArray.recycle();
  93.                 }
  94.  
  95.                 public int getCount() {
  96.                         return Imgid.length;
  97.                 }
  98.  
  99.                 public Object getItem(int position) {
  100.                         return position;
  101.                 }
  102.  
  103.                 public long getItemId(int position) {
  104.                         return position;
  105.                 }
  106.  
  107.                 public View getView(int position, View convertView, ViewGroup parent) {
  108.                         ImageView imgView = new ImageView(cont);
  109.  
  110.                         imgView.setImageResource(Imgid[position]);
  111.                         imgView.setLayoutParams(new Gallery.LayoutParams(80, 70));
  112.                         imgView.setScaleType(ImageView.ScaleType.FIT_XY);
  113.                         imgView.setBackgroundResource(GalItemBg);
  114.  
  115.                         return imgView;
  116.                 }
  117.         }
  118.  
  119. }

I declared the position variable at the begin of the main class. So this variable is global now.

  1.  GalleryExample.this.position = position;
  2.  

Put this line to gallery.setonlicklistener part. After this step you can use this number to get the resource from Imgid[] array.

The following lines going to listen your long click on imageview. An alertdialog will show up after long click. You can read more about alertdialogs at this site.

  1.                 imgView.setOnLongClickListener(new View.OnLongClickListener() {
  2.                         public boolean onLongClick(View v) {
  3.  
  4.                                 AlertDialog alertDialog = new AlertDialog.Builder(
  5.                                                 GalleryExample.this).create();
  6.                                 alertDialog.setTitle("Confirmation");
  7.                                 alertDialog
  8.                                                 .setMessage("Do you want to set this image as wallaper?");
  9.                                 alertDialog.setButton("Yes",
  10.                                                 new DialogInterface.OnClickListener() {
  11.                                                         public void onClick(DialogInterface dialog,
  12.                                                                         int which) {
  13.  
  14.                                                                 Bitmap bitmap = BitmapFactory.decodeResource(
  15.                                                                                 getResources(), Imgid[position]);
  16.                                                                 try {
  17.                                                                         GalleryExample.this.setWallpaper(bitmap);
  18.                                                                 } catch (IOException e) {
  19.                                                                         // TODO Auto-generated catch block
  20.                                                                         e.printStackTrace();
  21.                                                                 }
  22.                                                                 Log.d("Gallery Example", "Image setted.");
  23.  
  24.                                                         }
  25.                                                 });
  26.  
  27.                                 alertDialog.show();
  28.                                 return true;
  29.                         }
  30.                 });

That’s it. Feel free to download the complete changed source code from here.