package com.xyz.demo;

import java.util.ArrayList;


import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

public class CenterLockHorizontalScrollview extends HorizontalScrollView 
{

	Context context;
	int prevIndex = 0;
	
    private GestureDetector gestureDetector;
    View.OnTouchListener gestureListener;
    private static final int SWIPE_MIN_DISTANCE = 5;
    private static final int SWIPE_THRESHOLD_VELOCITY = 300;
    private int activeFeature = 0;
    
    
    private ArrayList<String> items = new ArrayList<String>(){

		{
			add("A");
			add("B");
			add("C");
			add("D");
			add("E");
			add("F");
			

		}
	};
    private GestureDetector mGestureDetector;
    private int mActiveFeature = 0;
	public CenterLockHorizontalScrollview(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
		this.setSmoothScrollingEnabled(true);
		gestureDetector = new GestureDetector(new MyGestureDetector());
	    setOnTouchListener(new View.OnTouchListener() {
	        @Override
	        public boolean onTouch(View v, MotionEvent event) {
	            if (gestureDetector.onTouchEvent(event)) {
	                return true;
	            }
	            else if(event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL ){
	                int scrollX = getScrollX();
	                Log.e("Action UP",""+scrollX);
	                int featureWidth = getMeasuredWidth();
	                activeFeature = ((scrollX + (featureWidth/2))/featureWidth);
	                int scrollTo = activeFeature*featureWidth;
	                smoothScrollTo(scrollTo, 0);
	                return true;
	            }
	            else{
	                return false;
	            }
	        }
	    });
		
	}

	
	
	

	public void setCenter(int index,Context mContext) {

		int screenWidth = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();

		int scrollX = (int)convertDpToPixel((screenWidth/2-40)+(index-1)*80-40,mContext)-screenWidth/2 ;
		Log.e("scrollX",""+scrollX);
		this.smoothScrollTo(scrollX, 0);
		prevIndex = index;
	}
	 
	
	class MyGestureDetector extends SimpleOnGestureListener {
	    @Override
	    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
	        try {
	            //right to left 
	            if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
	                activeFeature = (activeFeature < (items.size() - 1))? activeFeature + 1:items.size() -1;
	                smoothScrollTo(activeFeature*getMeasuredWidth(), 0);
	                Log.e("right to left",""+activeFeature*getMeasuredWidth());
	                return true;
	            }  
	            //left to right
	            else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
	                activeFeature = (activeFeature > 0)? activeFeature - 1:0;
	                smoothScrollTo(activeFeature*getMeasuredWidth(), 0);
	                Log.e("left to right",""+activeFeature*getMeasuredWidth());
	                return true;
	            }
	        } catch (Exception e) {
	            // nothing
	        }
	        return false;
	    }
	}
	
	
	public static float convertDpToPixel(float dp,Context context){
	    Resources resources = context.getResources();
	    DisplayMetrics metrics = resources.getDisplayMetrics();
	    float px = dp * (metrics.densityDpi/160f);
	    return px;
	}
	
	public static float convertPixelsToDp(float px,Context context){
	    Resources resources = context.getResources();
	    DisplayMetrics metrics = resources.getDisplayMetrics();
	    float dp = px / (metrics.densityDpi / 160f);
	    return dp;

	}


}
