android中带数字的水平滚动视图

android中带数字的水平滚动视图,android,scrollview,Android,Scrollview,当我将200 x文本视图与值放在一起时,我有scrollview 我有三个问题: 1.滚动停止在不同的位置。我需要停止它的价值中心滚动。 2.只有停止滚动,我才能从滚动中获取值。我想在中心值改变时得到它。 3.我有一个值为0-100的滚动条,中间的值是4。我想要0。和左边的空白区域 请帮帮我 代码: 把你的类文件和xml也放进去。我添加我的代码。在xml中,我有标准的水平滚动视图 for(int i = 0 ;i<221;i++) { valueTV

当我将200 x文本视图与值放在一起时,我有scrollview

我有三个问题: 1.滚动停止在不同的位置。我需要停止它的价值中心滚动。 2.只有停止滚动,我才能从滚动中获取值。我想在中心值改变时得到它。 3.我有一个值为0-100的滚动条,中间的值是4。我想要0。和左边的空白区域

请帮帮我

代码:


把你的类文件和xml也放进去。我添加我的代码。在xml中,我有标准的水平滚动视图
for(int i = 0 ;i<221;i++)
        {
            valueTV = new TextView(getActivity().getApplicationContext());
            valueTV.setText(Integer.toString(i));
            valueTV.setWidth(50);
            valueTV.setHeight(30);
            valueTV.setGravity(Gravity.CENTER_HORIZONTAL);
            valueTV.setTextColor(Color.BLACK);
            valueTV.setTag(i-1);
            line.addView(valueTV);
        }

        final int chilrenNum = line.getChildCount();

        scroll = (MyScrollView) rootView.findViewById(R.id.horizontalScrollView1);
        scroll.setOnScrollStoppedListener(new OnScrollStoppedListener() {

            @Override
            public void onScrollStopped() {
                int center = scroll.getScrollX() + scroll.getWidth() / 2;
                for (int i = 0; i < chilrenNum; i++) {
                    View v = line.getChildAt(i);
                    int viewLeft = v.getLeft();
                    int viewWidth = v.getWidth();
                    if (center >= viewLeft && center <= viewLeft + viewWidth)
                    {
                        int center_at=(viewLeft+5 + viewWidth / 2) - center;


                        scroll.scrollBy(center_at, 0);


                        height.setText(v.getTag().toString());
                        break;
                    }
                }



            }
        });
public class MyScrollView extends HorizontalScrollView{

private Runnable scrollerTask;
private int initialPosition;

private int newCheck = 100;

public interface OnScrollStoppedListener{
    void onScrollStopped();
}

private OnScrollStoppedListener onScrollStoppedListener;

public MyScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);

    scrollerTask = new Runnable() {

        public void run() {

            int newPosition = getScrollX();
            if(initialPosition - newPosition == 0){//has stopped

                if(onScrollStoppedListener!=null){
                    onScrollStoppedListener.onScrollStopped();
                }
            }else{
                initialPosition = getScrollX();
                MyScrollView.this.postDelayed(scrollerTask, newCheck);
            }
        }
    };

}


public void setOnScrollStoppedListener(OnScrollStoppedListener listener){
    onScrollStoppedListener = listener;
}

public void startScrollerTask(){

    initialPosition = getScrollX();
    MyScrollView.this.postDelayed(scrollerTask, newCheck);
}

}