title: How to call Pinch and Zoom class on am ImageView?
body: <p>I am a newbie to android development. Here I am trying to add pinch and zoom an image in my image view. The image is loaded on an activity called FullScreenView</p>
  
  <p>Here is my FullScreenView.java file</p>
  
  <pre><code>public class FullScreenViewActivity extends Activity implements OnClickListener {
      private static final String TAG = FullScreenViewActivity.class
              .getSimpleName();
      public static final String TAG_SEL_IMAGE = "selectedImage";
      private Wallpaper selectedPhoto;
      private ImageView fullImageView;
      private LinearLayout llSetWallpaper, llDownloadWallpaper,btShare;
      private Utils utils;
      private ProgressBar pbLoader;
  
      InterstitialAd mInterstitialAd;
  
  
  
      // Picasa JSON response node keys
      private static final String TAG_ENTRY = "entry",
              TAG_MEDIA_GROUP = "media$group",
              TAG_MEDIA_CONTENT = "media$content", TAG_IMG_URL = "url",
              TAG_IMG_WIDTH = "width", TAG_IMG_HEIGHT = "height";
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_fullscreen_image);
  
          //add code
          AdView mAdView = (AdView) findViewById(R.id.adView);
          AdRequest adRequest = new AdRequest.Builder().build();
          mAdView.loadAd(adRequest);
  
  
          mInterstitialAd = new InterstitialAd(this);
          mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
          requestNewInterstitial();
  
  
  
          fullImageView = (ImageView) findViewById(R.id.imgFullscreen);
          llSetWallpaper = (LinearLayout) findViewById(R.id.llSetWallpaper);
          llDownloadWallpaper = (LinearLayout) findViewById(R.id.llDownloadWallpaper);
          btShare = (LinearLayout) findViewById(R.id.btShare);
          pbLoader = (ProgressBar) findViewById(R.id.pbLoader);
  
          // hide the action bar in fullscreen mode
          getActionBar().hide();
  
          utils = new Utils(getApplicationContext());
  
          // layout click listeners
          llSetWallpaper.setOnClickListener(this);
          llDownloadWallpaper.setOnClickListener(this);
          btShare.setOnClickListener(this);
  
          // setting layout buttons alpha/opacity
          llSetWallpaper.getBackground().setAlpha(70);
          llDownloadWallpaper.getBackground().setAlpha(70);
          btShare.getBackground().setAlpha(70);
  
          Intent i = getIntent();
          selectedPhoto = (Wallpaper) i.getSerializableExtra(TAG_SEL_IMAGE);
  
          // check for selected photo null
          if (selectedPhoto != null) {
  
              // fetch photo full resolution image by making another json request
              fetchFullResolutionImage();
  
  
          } else {
              Toast.makeText(getApplicationContext(),
                      getString(R.string.msg_unknown_error), Toast.LENGTH_SHORT)
                      .show();
          }
  
  
  
  
  
  
  
      }
  
      private void requestNewInterstitial()
      {
  
          AdRequest adRequest = new AdRequest.Builder()
                  .addTestDevice("PFSW5H65PRTS9TTO")
                  .build();
  
          mInterstitialAd.loadAd(adRequest);
  
  
  
  
  
      }
  
      /**
       * Fetching image fullresolution json
       * */
      private void fetchFullResolutionImage() {
          String url = selectedPhoto.getPhotoJson();
  
          // show loader before making request
          pbLoader.setVisibility(View.VISIBLE);
          llSetWallpaper.setVisibility(View.GONE);
          llDownloadWallpaper.setVisibility(View.GONE);
          btShare.setVisibility(View.GONE);
  
          // volley's json obj request
          JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET, url,
                  null, new Response.Listener&lt;JSONObject&gt;() {
  
                      @Override
                      public void onResponse(JSONObject response) {
                          Log.d(TAG,
                                  "Image full resolution json: "
                                          + response.toString());
                          try {
                              // Parsing the json response
                              JSONObject entry = response
                                      .getJSONObject(TAG_ENTRY);
  
                              JSONArray mediacontentArry = entry.getJSONObject(
                                      TAG_MEDIA_GROUP).getJSONArray(
                                      TAG_MEDIA_CONTENT);
  
                              JSONObject mediaObj = (JSONObject) mediacontentArry
                                      .get(0);
  
                              final String fullResolutionUrl = mediaObj
                                      .getString(TAG_IMG_URL);
  
                              // image full resolution widht and height
                              final int width = mediaObj.getInt(TAG_IMG_WIDTH);
                              final int height = mediaObj.getInt(TAG_IMG_HEIGHT);
  
                              Log.d(TAG, "Full resolution image. url: "
                                      + fullResolutionUrl + ", w: " + width
                                      + ", h: " + height);
  
                              ImageLoader imageLoader = AppController
                                      .getInstance().getImageLoader();
  
                              // We download image into ImageView instead of
                              // NetworkImageView to have callback methods
                              // Currently NetworkImageView doesn't have callback
                              // methods
  
                              imageLoader.get(fullResolutionUrl,
                                      new ImageListener() {
  
                                          @Override
                                          public void onErrorResponse(
                                                  VolleyError arg0) {
                                              Toast.makeText(
                                                      getApplicationContext(),
                                                      getString(R.string.msg_wall_fetch_error),
                                                      Toast.LENGTH_LONG).show();
                                          }
  
                                          @Override
                                          public void onResponse(
                                                  ImageContainer response,
                                                  boolean arg1) {
                                              if (response.getBitmap() != null) {
                                                  // load bitmap into imageview
                                                  fullImageView
                                                          .setImageBitmap(response
                                                                  .getBitmap());
                                                  adjustImageAspect(width, height);
  
  
                                                  // hide loader and show set &amp;
                                                  // download buttons
                                                  pbLoader.setVisibility(View.GONE);
                                                  llSetWallpaper
                                                          .setVisibility(View.VISIBLE);
                                                  llDownloadWallpaper
                                                          .setVisibility(View.VISIBLE);
  
                                                  btShare
                                                          .setVisibility(View.VISIBLE);
  
  
                                              }
                                          }
                                      });
  
                          } catch (JSONException e) {
                              e.printStackTrace();
                              Toast.makeText(getApplicationContext(),
                                      getString(R.string.msg_unknown_error),
                                      Toast.LENGTH_LONG).show();
                          }
  
                      }
                  }, new Response.ErrorListener() {
  
                      @Override
                      public void onErrorResponse(VolleyError error) {
                          Log.e(TAG, "Error: " + error.getMessage());
                          // unable to fetch wallpapers
                          // either google username is wrong or
                          // devices doesn't have internet connection
                          Toast.makeText(getApplicationContext(),
                                  getString(R.string.msg_wall_fetch_error),
                                  Toast.LENGTH_LONG).show();
  
                      }
                  });
  
          // Remove the url from cache
          AppController.getInstance().getRequestQueue().getCache().remove(url);
  
          // Disable the cache for this url, so that it always fetches updated
          // json
          jsonObjReq.setShouldCache(false);
  
          // Adding request to request queue
          AppController.getInstance().addToRequestQueue(jsonObjReq);
  
      }
  
      /**
       * Adjusting the image aspect ration to scroll horizontally, Image height
       * will be screen height, width will be calculated respected to height
       * */
      @SuppressWarnings("deprecation")
      @SuppressLint("NewApi")
      private void adjustImageAspect(int bWidth, int bHeight) {
          LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                  LayoutParams.FILL_PARENT , LayoutParams.FILL_PARENT);
  
          if (bWidth == 0 || bHeight == 0)
              return;
  
          int sHeight = 0;
  
          if (android.os.Build.VERSION.SDK_INT &gt;= 13) {
              Display display = getWindowManager().getDefaultDisplay();
              Point size = new Point();
              display.getSize(size);
              sHeight = size.y;
          } else {
              Display display = getWindowManager().getDefaultDisplay();
              sHeight = display.getHeight();
          }
  
          int new_width = (int) Math.floor((double) bWidth * (double) sHeight
                  / (double) bHeight);
          params.width = new_width;
          params.height = sHeight;
  
          Log.d(TAG, "Fullscreen image new dimensions: w = " + new_width
                  + ", h = " + sHeight);
  
          //fullImageView.setLayoutParams(params);
         // fullImageView.setAdjustViewBounds(true);
          fullImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
  
  
      }
  
      /**
       * View click listener
       * */
      @Override
      public void onClick(View v) {
  
  
  
          if (mInterstitialAd.isLoaded()) {
              mInterstitialAd.show();
          } //else
          //{
             // beginPlayingGame();
         // }
  
  
          Bitmap bitmap = ((BitmapDrawable) fullImageView.getDrawable())
                  .getBitmap();
          File cache = getApplicationContext().getExternalCacheDir();
          File sharefile = new File(cache, "toshare.png");
          try {
              FileOutputStream out = new FileOutputStream(sharefile);
              bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
              out.flush();
              out.close();
          } catch (IOException e) {
  
          }
  
  
  
          switch (v.getId()) {
          // button Download Wallpaper tapped
          case R.id.llDownloadWallpaper:
              utils.saveImageToSDCard(bitmap);
  
              break;
          // button Set As Wallpaper tapped
          case R.id.llSetWallpaper:
              utils.setAsWallpaper(bitmap);
              break;
  
  
              case R.id.btShare:
                  Intent share = new Intent(android.content.Intent.ACTION_SEND);
                  share.setType("image/*");
                  share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + sharefile));
                  try {
                      startActivity(Intent.createChooser(share, "Share photo"));
                  } catch (Exception e) {
  
                  }
                  break;
  
          default:
              break;
          }
  
      }
  }
  </code></pre>
  
  <p>I also create the class for bringing pinch and zoom facility to this.</p>
  
  <p>ZoomableImageView.java</p>
  
  <pre><code>public class ZoomableImageView extends View {
     //Code goes here
  }
  </code></pre>
  
  <p>How to call this ZoomableImageView  java class file to FullScreenViewActivity so that,when i pinch and zoom, it get works...</p>