2015-05-01 3 views
0

У меня есть сетка. Когда какой-либо элемент в gridview щелкнут, изображение приближается и приближается к центру экрана, а влево и вправо - изображение в изображении. Это был механизм приложения.Как добавить библиотеку Пикассо

Изображения присутствуют в папках с возможностью рисования, но я хочу получить их из URL-адресов, для этого я использую библиотеку Picasso.

Я импортировал файл jar библиотеки picasso в папку libs, сетевые разрешения, добавленные в манифест, все, что у меня осталось, это изменения в моей MainActivity.

Я использовал «int» для инициализации изображений, теперь как я могу заменить эти изображения на URL.

Вот мой код:

public class MainActivity extends Activity { 

    private GridView gv; 
    private Animator mCurrentAnimator; 
    private int mShortAnimationDuration; 
    private int j = 0; 

    private final GestureDetector detector = new GestureDetector(
      new SwipeGestureDetector()); 
    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

    // Create Array thumbs resource id's: 
    private int thumb[] = { R.drawable.one, R.drawable.two, R.drawable.three, 
      R.drawable.four, R.drawable.five, R.drawable.six, R.drawable.seven, 
      R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, 
      R.drawable.five, R.drawable.six, R.drawable.seven, 
      R.drawable.eight, R.drawable.one }; 

    private ImageView expandedImageView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Initialize the variables: 
     gv = (GridView) findViewById(R.id.gridView); 

     // Set an Adapter to the ListView 
     gv.setAdapter(new ImageAdapter(this)); 

     // Set on item click listener to the ListView 
     gv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, int pos, 
        long id) { 

       // Display the zoomed in image in full screen 
       j = pos; 
       zoomImageFromThumb(v, thumb[pos]); 

      } 
     }); 

     // Set the Animation time form the android defaults 
     mShortAnimationDuration = getResources().getInteger(
       android.R.integer.config_shortAnimTime); 

    } 

    // Create an Adapter Class extending the BaseAdapter 
    class ImageAdapter extends BaseAdapter { 

     private LayoutInflater layoutInflater; 

     public ImageAdapter(MainActivity activity) { 
      // TODO Auto-generated constructor stub 
      layoutInflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     @Override 
     public int getCount() { 
      // Set the count value to the total number of items in the Array 
      return thumb.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      // Inflate the item layout and set the views 
      View listItem = convertView; 
      int pos = position; 
      if (listItem == null) { 
       listItem = layoutInflater.inflate(R.layout.grid_item, null); 
      } 

      // Initialize the views in the layout 
      ImageView iv = (ImageView) listItem.findViewById(R.id.thumb); 

      // Set the views in the layout 
      iv.setBackgroundResource(thumb[pos]); 

      return listItem; 
     } 

    } 

    private void zoomImageFromThumb(final View thumbView, int imageResId) { 
     // If there's an animation in progress, cancel it immediately and 
     // proceed with this one. 
     if (mCurrentAnimator != null) { 
      mCurrentAnimator.cancel(); 
     } 

     // Load the high-resolution "zoomed-in" image. 
     expandedImageView = (ImageView) findViewById(R.id.expanded_image); 

     expandedImageView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (detector.onTouchEvent(event)) 
        return true; 
       else 
        return false; 
      } 
     }); 

     expandedImageView.setImageResource(imageResId); 

     // Calculate the starting and ending bounds for the zoomed-in image. 
     // This step 
     // involves lots of math. Yay, math. 
     final Rect startBounds = new Rect(); 
     final Rect finalBounds = new Rect(); 
     final Point globalOffset = new Point(); 

     // The start bounds are the global visible rectangle of the thumbnail, 
     // and the 
     // final bounds are the global visible rectangle of the container view. 
     // Also 
     // set the container view's offset as the origin for the bounds, since 
     // that's 
     // the origin for the positioning animation properties (X, Y). 
     thumbView.getGlobalVisibleRect(startBounds); 
     findViewById(R.id.container).getGlobalVisibleRect(finalBounds, 
       globalOffset); 
     startBounds.offset(-globalOffset.x, -globalOffset.y); 
     finalBounds.offset(-globalOffset.x, -globalOffset.y); 

     // Adjust the start bounds to be the same aspect ratio as the final 
     // bounds using the 
     // "center crop" technique. This prevents undesirable stretching during 
     // the animation. 
     // Also calculate the start scaling factor (the end scaling factor is 
     // always 1.0). 
     float startScale; 
     if ((float) finalBounds.width()/finalBounds.height() > (float) startBounds 
       .width()/startBounds.height()) { 
      // Extend start bounds horizontally 
      startScale = (float) startBounds.height()/finalBounds.height(); 
      float startWidth = startScale * finalBounds.width(); 
      float deltaWidth = (startWidth - startBounds.width())/2; 
      startBounds.left -= deltaWidth; 
      startBounds.right += deltaWidth; 
     } else { 
      // Extend start bounds vertically 
      startScale = (float) startBounds.width()/finalBounds.width(); 
      float startHeight = startScale * finalBounds.height(); 
      float deltaHeight = (startHeight - startBounds.height())/2; 
      startBounds.top -= deltaHeight; 
      startBounds.bottom += deltaHeight; 
     } 

     // Hide the thumbnail and show the zoomed-in view. When the animation 
     // begins, 
     // it will position the zoomed-in view in the place of the thumbnail. 
     thumbView.setAlpha(0f); 
     expandedImageView.setVisibility(View.VISIBLE); 

     // Set the pivot point for SCALE_X and SCALE_Y transformations to the 
     // top-left corner of 
     // the zoomed-in view (the default is the center of the view). 
     expandedImageView.setPivotX(0f); 
     expandedImageView.setPivotY(0f); 

     // Construct and run the parallel animation of the four translation and 
     // scale properties 
     // (X, Y, SCALE_X, and SCALE_Y). 
     AnimatorSet set = new AnimatorSet(); 
     set.play(
       ObjectAnimator.ofFloat(expandedImageView, View.X, 
         startBounds.left, finalBounds.left)) 
       .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, 
         startBounds.top, finalBounds.top)) 
       .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, 
         startScale, 1f)) 
       .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, 
         startScale, 1f)); 
     set.setDuration(mShortAnimationDuration); 
     set.setInterpolator(new DecelerateInterpolator()); 
     set.addListener(new AnimatorListenerAdapter() { 
      @Override 
      public void onAnimationEnd(Animator animation) { 
       mCurrentAnimator = null; 
      } 

      @Override 
      public void onAnimationCancel(Animator animation) { 
       mCurrentAnimator = null; 
      } 
     }); 
     set.start(); 
     mCurrentAnimator = set; 

     // Upon clicking the zoomed-in image, it should zoom back down to the 
     // original bounds 
     // and show the thumbnail instead of the expanded image. 
     final float startScaleFinal = startScale; 
     expandedImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (mCurrentAnimator != null) { 
        mCurrentAnimator.cancel(); 
       } 

       // Animate the four positioning/sizing properties in parallel, 
       // back to their 
       // original values. 
       AnimatorSet set = new AnimatorSet(); 
       set.play(
         ObjectAnimator.ofFloat(expandedImageView, View.X, 
           startBounds.left)) 
         .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, 
           startBounds.top)) 
         .with(ObjectAnimator.ofFloat(expandedImageView, 
           View.SCALE_X, startScaleFinal)) 
         .with(ObjectAnimator.ofFloat(expandedImageView, 
           View.SCALE_Y, startScaleFinal)); 
       set.setDuration(mShortAnimationDuration); 
       set.setInterpolator(new DecelerateInterpolator()); 
       set.addListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         thumbView.setAlpha(1f); 
         expandedImageView.setVisibility(View.GONE); 
         mCurrentAnimator = null; 
        } 

        @Override 
        public void onAnimationCancel(Animator animation) { 
         thumbView.setAlpha(1f); 
         expandedImageView.setVisibility(View.GONE); 
         mCurrentAnimator = null; 
        } 
       }); 
       set.start(); 
       mCurrentAnimator = set; 
      } 
     }); 
    } 

    private class SwipeGestureDetector extends 
      GestureDetector.SimpleOnGestureListener { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 
      try { 
       if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 

        if (thumb.length > j) { 
         j++; 

         if (j < thumb.length) { 
          expandedImageView.setImageResource(thumb[j]); 
          return true; 
         } else { 
          j = 0; 
          expandedImageView.setImageResource(thumb[j]); 
          return true; 
         } 

        } 
       } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 

        if (j > 0) { 
         j--; 
         expandedImageView.setImageResource(thumb[j]); 
         return true; 

        } else { 
         j = thumb.length - 1; 
         expandedImageView.setImageResource(thumb[j]); 
         return true; 
        } 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return false; 
     } 

    } 
} 

Когда я пытаюсь тайному в вытяжке инициализацию из INT в строку, как это:

private String[] thumb = new String[] { 

     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/seven-min_zpsdnohn4io.png", 
     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/one-min_zpsxdzul6kt.png", 
     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/two-min_zpsgsjz8ugv.png", 
     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/three-min_zpshzlif6si.png", 
     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/six-min_zpsfx9d2dse.png", 
     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/four-min_zpsqlpatblc.png", 
     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/five-min_zps4ouhgigl.png", 
     "http://i1040.photobucket.com/albums/b406/Aleem_Ahmed/eight-min_zpsnr9cdgga.png", 

}; 

Чем код показывает следующие ошибки:

The method zoomImageFromThumb(View, int) in the type MainActivity is not applicable for the arguments (View, String) 

The method setImageResource(int) in the type ImageView is not applicable for the arguments (String) 

Что мне не хватает или что-то не так?

+0

Где вы пользуетесь библиотекой Picasso? Я не могу найти его здесь в коде – NarendraJi

+0

@DroidWormNarendra Вы имеете в виду этот код? Picasso.with (контекст) .load ("http://i.imgur.com/DvpvklR.png") .into (ImageView); –

+0

@DroidWormNarendra Ну, я не могу понять, где и как это сделать. –

ответ

0

Использование Пикассо, как это -

Picasso.with(this) 
    .load("YOUR IMAGE URL HERE") 
    .into(imageView); 

Просто поместите его, где вам нужно установить изображение.

+0

Поместите его вместо iv.setBackgroundResource (thumb [pos]); – NarendraJi

+0

Но у меня есть более одного изображения –

+0

В этом вопросе нет проблем. Вы можете использовать тот же строковый массив url, который вы используете. – NarendraJi