package eoc.studio.voicecard.calendarview; import java.util.ArrayList; import java.util.Map; import eoc.studio.voicecard.R; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.FrameLayout; import android.widget.GridView; import android.widget.HorizontalScrollView; import android.widget.RelativeLayout; public class SetOfCalendarView extends Fragment implements OnTouchListener { private static Context mContext; private static SetOfCalendarAdapter calendarAdapter; private static HorizontalScrollView horizontalScrollView = null; private static float moveStart = 0, moveEnd = 0; private static boolean isSmoothScroll = false; private int getPages = 0; private static ArrayList<Map<String, String>> mData; private static GridView calendarGrid; private static RelativeLayout hideView; private static final int DEFAULT_SCROOL_SITE = 0; private static int DEFAULT_SCROOL_BUFF, DEFAULT_NOITE_WIDTH; private static final int DEFAULT_SCROOL_BUFF_XHDPI = 100; private static final int DEFAULT_NOITE_WIDTH_XHDPI = 435; private static final int DEFAULT_SCROOL_BUFF_HDPI = 75; private static final int DEFAULT_NOITE_WIDTH_HDPI = 326; private static final int ONE_PAGE = 1, THREE_PAGE = 3; // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public SetOfCalendarView() { } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mContext = getActivity(); final RelativeLayout calendarLayout = (RelativeLayout) inflater.inflate(R.layout.set_of_calendar, null); hideView = (RelativeLayout) calendarLayout.findViewById(R.id.hideView); horizontalScrollView = (HorizontalScrollView) calendarLayout.findViewById(R.id.calendar_horizontal_scroll); calendarGrid = (GridView) calendarLayout.findViewById(R.id.calendar_grid); horizontalScrollView.setOnTouchListener(this); getNewView(); return calendarLayout; } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// protected static void getNewView() { float scale = mContext.getResources().getDisplayMetrics().density; if (scale == 1.5) { DEFAULT_SCROOL_BUFF = DEFAULT_SCROOL_BUFF_HDPI; DEFAULT_NOITE_WIDTH = DEFAULT_NOITE_WIDTH_HDPI; } else { DEFAULT_SCROOL_BUFF = DEFAULT_SCROOL_BUFF_XHDPI; DEFAULT_NOITE_WIDTH = DEFAULT_NOITE_WIDTH_XHDPI; } mData = getEventData(); if (mData == null) { return; } calendarAdapter = new SetOfCalendarAdapter(mContext, mData); if (mData.size() == 1) { hideView.setVisibility(View.INVISIBLE); } else { hideView.setVisibility(View.GONE); } calendarGrid.setNumColumns(mData.size()); calendarGrid.setLayoutParams(new FrameLayout.LayoutParams((DEFAULT_NOITE_WIDTH + DEFAULT_SCROOL_BUFF) * mData.size(), 510)); calendarGrid.setSelector(new ColorDrawable(Color.TRANSPARENT)); calendarGrid.setOnItemClickListener(new DayItemClickListener()); calendarGrid.setAdapter(calendarAdapter); } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE && !isSmoothScroll) { isSmoothScroll = true; moveStart = event.getX(); } else if (event.getAction() == MotionEvent.ACTION_UP) { isSmoothScroll = false; moveEnd = event.getX(); if (moveStart > moveEnd) { if (getPages >= (mData.size() - 1)) { return true; } smoothScrollView((++getPages)); } else { if (getPages < 1) { return false; } smoothScrollView((--getPages)); } } return true; } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private static void smoothScrollView(final int getPage) { new Handler().postDelayed((new Runnable() { @Override public void run() { if (getPage == DEFAULT_SCROOL_SITE) { horizontalScrollView.smoothScrollTo(DEFAULT_SCROOL_SITE, DEFAULT_SCROOL_SITE); } else if (getPage == ONE_PAGE) { horizontalScrollView.smoothScrollTo(DEFAULT_NOITE_WIDTH, DEFAULT_SCROOL_SITE); } else if (getPage < THREE_PAGE) { horizontalScrollView.smoothScrollTo((DEFAULT_NOITE_WIDTH * (getPage)) + DEFAULT_SCROOL_BUFF, DEFAULT_SCROOL_SITE); } else { horizontalScrollView.smoothScrollTo(((DEFAULT_NOITE_WIDTH + DEFAULT_SCROOL_BUFF) * getPage) - DEFAULT_SCROOL_BUFF, DEFAULT_SCROOL_SITE); } } }), 5); } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private static ArrayList<Map<String, String>> getEventData() { String event = DataProcess.getSelectedEventDate(); if (!event.equals("")) { return CalendarIntentHelper.readCalendarEvent(mContext, DataProcess.getSelectedEventDate()); } return null; } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private static final class DayItemClickListener implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { calendarAdapter.setSelected(position); } } // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// }