【问题标题】:Android: Stop Gallery Scrolling Without Choosing ItemAndroid:停止画廊滚动而不选择项目
【发布时间】:2011-05-17 10:34:24
【问题描述】:

我目前正在使用画廊视图,并且在 onFling 期间它滚动得非常快。我的问题是我已经设置了每个项目的 onClick 以将您带到一个新活动。但我只想在画廊当前没有滚动的情况下才能工作。如果画廊正在滚动,我希望第一次点击就可以在当前位置停止滚动。

谁能分享可以让我检查画廊滚动状态的代码,或者可以停止滚动操作的自定义画廊代码?

谢谢, 乔什

【问题讨论】:

标签: android gallery


【解决方案1】:

我想这个答案有点晚了,但这是对这个问题的回应,我刚刚修复它并想与遇到相同问题的任何人分享......

public class CustomGallery extends Gallery {
public CustomGallery(Context context) {
   super(context);
}

public CustomGallery(Context context, AttributeSet attrs) {
   super(context, attrs);
}
public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
   super(context, attrs, defStyle);
}
    //In case you might want the gallery to start from left(another known issue...)
public void alignToLeft(Activity activity) {
    super.onAttachedToWindow();
    DisplayMetrics display = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(display);
    // start the images from the left...
    int scrollTo = (int) (display.widthPixels - getPixelsFromDIP(display,POSTER_WIDTH_DIP) - 2 * getPixelsFromDIP(display, 5));

    MarginLayoutParams margins = (MarginLayoutParams)getLayoutParams();
    MarginLayoutParams.class.cast(this.getLayoutParams()).setMargins(-scrollTo + margins.leftMargin, margins.topMargin, margins.rightMargin, margins.bottomMargin);
}

private int getPixelsFromDIP(DisplayMetrics display, int dps){
    return (int)(dps * display.scaledDensity + 0.5F);
}

    //Override single tap up, to prevent propagation of the event, and force
    //the listener to push the event calculating position from X,Y coords
private OnItemClickListener listener;
@Override
public boolean onSingleTapUp(MotionEvent e) {
    if(listener != null){
        listener.onItemClick(null, this, pointToPosition((int) e.getX(), (int) e.getY()), 0x0345);
    }else{
        return super.onSingleTapUp(e);
    }
    return false;
}

    //Override the method to assign our custom item listener...
@Override
public void setOnItemClickListener(
        android.widget.AdapterView.OnItemClickListener listener) {
    this.listener = listener;
}}

现在您所要做的就是,将图库用作常规组件,为其分配 OnItemClickListener,您无需滚动即可获得项目的位置...

final CustomGallery customGallery = (CustomGallery)personDetailView.findViewById(R.id.customGallery);
            customGallery(this);
            customGallery(castCrewAdapter);
            customGallery(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int position, long arg3) {
                    android.util.Log.e("customGallery TAG", "Item clicked: " + position);
                }
            });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多