package com.xiaomi.xms.sales.widget; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.Gallery; import android.widget.ImageView; import android.widget.Toast; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.adapter.AttentionImageAdapter; import com.xiaomi.xms.sales.util.Constants; /** * * @author 空山不空 扩展Gallery组件,设置滑动一次只加载一张图片,并且, 如果是第一张图片时,向左滑动会提示“已到第一页” * 如果是最后一张图片时,向右滑动会提示“已到第后页” */ public class GalleryExt extends Gallery { boolean is_first = false; boolean is_last = false; private Button beginBtn; private ImageView checkedDot; public GalleryExt(Context context) { super(context); } public GalleryExt(Context context, AttributeSet paramAttributeSet) { super(context, paramAttributeSet); } private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) { return e2.getX() > e1.getX(); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // 通过重构onFling方法,使Gallery控件滑动一次只加载一张图片 // 获取适配器 AttentionImageAdapter ia = (AttentionImageAdapter) this.getAdapter(); // 得到当前图片在图片资源中的位置 int p = ia.getOwnposition(); if(checkedDot != null){ if (Constants.picSet.contains(p)) { checkedDot.setVisibility(View.VISIBLE); } else { checkedDot.setVisibility(View.GONE); } } // 图片的总数量 int count = ia.getCount(); int kEvent; if (isScrollingLeft(e1, e2)) { // Check if scrolling left if (p == 0 && is_first) { // 在第一页并且再往左移动的时候,提示 Toast.makeText(this.getContext(), "已到第一页", Toast.LENGTH_SHORT) .show(); } else if (p == 0) { // 到达第一页时,把is_first设置为true is_first = true; } else { is_last = false; } kEvent = KeyEvent.KEYCODE_DPAD_LEFT; } else { // Otherwise scrolling right if (p == count - 1 && is_last) { Toast.makeText(this.getContext(), "已到最后一页", Toast.LENGTH_SHORT) .show(); beginBtn.setVisibility(View.VISIBLE); if (((AttentionImageAdapter) this.getAdapter()).getImgres().length > 5) { beginBtn.setText(R.string.picture_test_end); } } else if (p == count - 1) { is_last = true; } else { is_first = false; } kEvent = KeyEvent.KEYCODE_DPAD_RIGHT; } onKeyDown(kEvent, null); return true; } public Button getBeginBtn() { return beginBtn; } public void setBeginBtn(Button beginBtn) { this.beginBtn = beginBtn; } public ImageView getCheckedDot() { return checkedDot; } public void setCheckedDot(ImageView checkedDot) { this.checkedDot = checkedDot; } }