2011-03-09 64 views
0

在android画廊我面临一个问题。在图库中(水平)我显示全屏项目。当我滚动到屏幕的一半时缓慢地水平滚动该项目时,它会自动跳转到看起来很奇怪的下一个项目。我不想自动跳转。我认为这个例子有助于理解问题。如果有人有想法解决问题,请帮助。自定义Android小部件画廊

回答

0

如果我正确理解你,你不希望小部件自动移动到下一个项目,如果它移动太多。改为尝试HorizontalScrollView

+0

我也试过Horizo​​ntalScrollView。但是,我也遇到了问题。在每个项目中,我都使用了一个框架布局,其中有2个相对布局。在画廊外面,我有一个“翻转”按钮。当点击翻页按钮时,我翻转该项目的相对布局。但是,在翻转当前项目后滚动到下一个项目时会出现问题。下一个项目显示翻转,但该项目没有翻转。 – gypsicoder 2011-03-10 12:23:29

0

发生这种情况是因为您可能使用onItemSelected()回调来更新视图。

即使您设置了setCallbackDuringFling(false),当滚动缓慢时也会调用回调。

我注意到,在回调中更新按钮中的文本会导致您描述的跳转。 TextViews也是如此,但ImageView似乎没有这个问题。

我的解决方案/黑客是扩展有问题的视图(按钮),并自己绘制文本,绕过造成问题的方法中发生的任何事情。 下面是完整的代码:

public class ValueButton extends Button { 
    private String text = ""; 
    private Paint textPaint; 
    private float textX, textY; 

    public ValueButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     textPaint = new Paint(); 
     textPaint.setAntiAlias(true); 
     textPaint.setTextAlign(Align.CENTER); 
    } 

    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     textPaint.setTextSize(h/2); 
     textX = w/2; 
     textY = getBaseline(); 
    }; 

    public void setTextNoJump(String text) { 
     this.text = text; 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawText(text, textX, textY, textPaint); 
    } 
} 

这段代码的问题是,它忽略了文本格式的XML文件中设置。 如果任何人有一个简单的解决方案,我很乐意听到它。