自定义Android小部件库

时间:2011-03-09 20:47:26

标签: android android-widget

在Android画廊中我遇到了一个问题。在图库(水平)中,我显示全屏项目。当我滚动到屏幕的一半时,我慢慢地水平滚动项目,它会自动跳转到下一个非常奇怪的项目。我不想自动跳跃。我认为这个例子对理解这个问题很有意义。如果有人有想法解决问题,请帮忙。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您不希望小部件在移动太多时自动移动到下一个项目。请改为HorizontalScrollView

答案 1 :(得分:0)

这是因为您可能正在使用onItemSelected()回调来更新视图。

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

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

我的解决方案/ hack是扩展有问题的视图(Button)并自己绘制文本,绕过导致问题的SetText方法中发生的任何事情。 这是完整的代码:

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文件中设置的文本格式。 如果有人能够轻松解决这个问题,我会很高兴听到它。