package com.hawkbrowser.shell; import java.util.ArrayList; import com.hawkbrowser.R; import com.hawkbrowser.util.CommonUtil; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Point; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.TextView; public class WebViewSelecter implements View.OnTouchListener { public interface EventListener { void onItemSelect(int i); void onItemClose(int i); } private static final int ITEM_COUNT_PER_SCREEN = 3; private EventListener mListener; private Context mContext; private ArrayList<String> mTitles; private ArrayList<Bitmap> mBitmaps; private ViewGroup mView; private int mCurrentScreen; private PopupWindow mPopup; private float mStartPosX = 0; public WebViewSelecter(Context ctx, ArrayList<String> titles, ArrayList<Bitmap> bitmaps) { mContext = ctx; mTitles = titles; mBitmaps = bitmaps; mCurrentScreen = 0; mView = createView(); updateItems(); } @Override public boolean onTouch(View v, MotionEvent event) { if(mTitles.size() <= ITEM_COUNT_PER_SCREEN) { return false; } if(MotionEvent.ACTION_DOWN == event.getAction()) { mStartPosX = event.getX(); return false; } if(MotionEvent.ACTION_UP == event.getAction()) { boolean isMove = false; final int moveLen = 50; if(event.getX() - mStartPosX > moveLen) { --mCurrentScreen; isMove = true; } else if(event.getX() - mStartPosX < -moveLen) { ++mCurrentScreen; isMove = true; } if(isMove) { int maxScreen = 1; if(mTitles.size() > 0) { maxScreen = (mTitles.size() - 1) / ITEM_COUNT_PER_SCREEN; } if(mCurrentScreen > maxScreen) { mCurrentScreen = maxScreen; } if(mCurrentScreen < 0) { mCurrentScreen = 0; } mStartPosX = 0; updateItems(); return true; } } return false; } public void setEventListener(EventListener listener) { mListener = listener; } public View getView() { return mView; } private ViewGroup createView() { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewGroup webThumbContainer = (ViewGroup) inflater.inflate(R.layout.select_webview, null); webThumbContainer.getBackground().setAlpha(175); for(int i = 0; i < webThumbContainer.getChildCount(); ++i) { ViewGroup item = (ViewGroup) webThumbContainer.getChildAt(i); ImageView webImage = (ImageView) item.findViewById(R.id.selectwebviewitem_image); webImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(null != mListener) { mListener.onItemSelect((Integer)v.getTag()); } } }); webImage.setOnTouchListener(this); View closeView = item.findViewById(R.id.selectwebviewitem_title); closeView.setTag(i); closeView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(null != mListener) { int i = (Integer)v.getTag(); ViewGroup item = (ViewGroup) mView.getChildAt(i); item.setVisibility(View.INVISIBLE); mTitles.remove(i); mBitmaps.remove(i); mListener.onItemClose(i); } } }); } webThumbContainer.setOnTouchListener(this); return webThumbContainer; } private void setItemsVisibility(int visibility) { for(int i = 0; i < mView.getChildCount(); ++i) { ViewGroup item = (ViewGroup) mView.getChildAt(i); item.setVisibility(visibility); } } public void updateItems() { setItemsVisibility(View.INVISIBLE); int startPos = mCurrentScreen * ITEM_COUNT_PER_SCREEN; int endPos = Math.min(mTitles.size(), startPos + ITEM_COUNT_PER_SCREEN); for(int i = startPos; i < endPos; ++i) { ViewGroup item = (ViewGroup) mView.getChildAt(i - startPos); item.setVisibility(View.VISIBLE); TextView titleView = (TextView) item.findViewById(R.id.selectwebviewitem_title); titleView.setText(mTitles.get(i)); ImageView webImage = (ImageView) item.findViewById(R.id.selectwebviewitem_image); webImage.setImageBitmap(mBitmaps.get(i)); webImage.setTag(i); } } public boolean isShow() { return null != mPopup; } public void show(View anchor) { if(null == mPopup) { Point screenSize = CommonUtil.screenSize(mContext); mPopup = new PopupWindow(mView, screenSize.x, screenSize.y / 4); mPopup.showAsDropDown(anchor, 0, 0); } } public void dismiss() { if(null != mPopup) { mPopup.dismiss(); // for(Bitmap bitmap : mBitmaps) { // bitmap.recycle(); // } mBitmaps.clear(); mPopup = null; } } }