Advertisement
Avatarr

ScreenShotSlider

Nov 25th, 2014
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.79 KB | None | 0 0
  1. package ais.mobilelife.appstore1.views;
  2.  
  3. import android.content.Context;
  4. import android.util.AttributeSet;
  5. import android.util.Log;
  6. import android.view.GestureDetector;
  7. import android.view.MotionEvent;
  8. import android.view.View;
  9. import android.widget.HorizontalScrollView;
  10. import android.widget.ImageView;
  11. import android.widget.LinearLayout;
  12.  
  13. import com.squareup.picasso.Picasso;
  14.  
  15. import java.util.ArrayList;
  16.  
  17. import ais.mobilelife.appstore1.R;
  18. import ais.mobilelife.appstore1.utils.UiHelper;
  19.  
  20. /**
  21.  * Created by apichais on 11/24/14 AD.
  22.  */
  23. public class ScreenShotSlider extends HorizontalScrollView {
  24.     private static final int SWIPE_MIN_DISTANCE = 5;
  25.     private static final int SWIPE_THRESHOLD_VELOCITY = 300;
  26.  
  27.     private ArrayList mItems = null;
  28.     private GestureDetector mGestureDetector;
  29.     private int mActiveFeature = 0;
  30.  
  31.     public ScreenShotSlider(Context context, AttributeSet attrs, int defStyle) {
  32.         super(context, attrs, defStyle);
  33.     }
  34.  
  35.     public ScreenShotSlider(Context context, AttributeSet attrs) {
  36.         super(context, attrs);
  37.     }
  38.  
  39.     public ScreenShotSlider(Context context) {
  40.         super(context);
  41.     }
  42.  
  43.     public void setScreenshots(ArrayList items) {
  44.         LinearLayout internalWrapper = new LinearLayout(getContext());
  45.         internalWrapper.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
  46.         internalWrapper.setOrientation(LinearLayout.HORIZONTAL);
  47.         addView(internalWrapper);
  48.         this.mItems = items;
  49.  
  50.         for (int i = 0; i < items.size(); i++) {
  51.             ImageView imageView = new ImageView(getContext());
  52.             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);
  53.             imageView.setLayoutParams(params);
  54.             imageView.setAdjustViewBounds(true);
  55.             if(i < items.size() - 1) {
  56.                 imageView.setPadding(0, 0, (int) UiHelper.convertDpToPixel(5, getContext()), 0);
  57.             }
  58.  
  59.             Picasso.with(getContext()).load(mItems.get(i).toString()).into(imageView);
  60.             internalWrapper.addView(imageView);
  61.  
  62.             imageView.setOnTouchListener(new OnTouchListener() {
  63.                 @Override
  64.                 public boolean onTouch(View view, MotionEvent motionEvent) {
  65.                     featureWidth = view.getMeasuredWidth();
  66.                     return false;
  67.                 }
  68.             });
  69.         }
  70.  
  71.         setOnTouchListener(new View.OnTouchListener() {
  72.             @Override
  73.             public boolean onTouch(View v, MotionEvent event) {
  74.                 //If the user swipes
  75.                 if (mGestureDetector.onTouchEvent(event)) {
  76.                     return true;
  77.                 } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
  78.  
  79. //                    Log.e("alsklsaklassa", "asdasdadsasdasdasd ");
  80.                     int scrollX = getScrollX();
  81. //                    int featureWidth = v.getMeasuredWidth();
  82.                     mActiveFeature = ((scrollX + (featureWidth / 2)) / featureWidth);
  83.                     int scrollTo = mActiveFeature * featureWidth;
  84.                     smoothScrollTo(scrollTo, 0);
  85.                     return true;
  86.                 } else {
  87.                     return false;
  88.                 }
  89.             }
  90.         });
  91.         mGestureDetector = new GestureDetector(getContext(), new MyGestureDetector());
  92.     }
  93.  
  94.     private int featureWidth;
  95.  
  96.     class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {
  97.         @Override
  98.         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
  99.             try {
  100.                 //right to left
  101.                 if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
  102. //                    int featureWidth = getMeasuredWidth();
  103.                     mActiveFeature = (mActiveFeature < (mItems.size() - 2)) ? mActiveFeature + 1 : mItems.size() - 2;
  104.                     smoothScrollTo(mActiveFeature * featureWidth, 0);
  105.                     return true;
  106.                 }
  107.                 //left to right
  108.                 else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
  109. //                    int featureWidth = getMeasuredWidth();
  110.                     mActiveFeature = (mActiveFeature > 0) ? mActiveFeature - 1 : 0;
  111.                     smoothScrollTo(mActiveFeature * featureWidth, 0);
  112.                     return true;
  113.                 }
  114.             } catch (Exception e) {
  115.                 Log.e("Fling", "There was an error processing the Fling event:" + e.getMessage());
  116.             }
  117.             return false;
  118.         }
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement