0

当我将 200 x TextView 与值放在一起时,我有滚动视图。

我有三个问题: 1. 滚动停止在不同的位置。我需要在中心滚动上停止它的价值。2. 只有停止滚动,我才能从滚动中获得价值。我想在中心值发生变化时得到它。3. 我的滚动值为 0 - 100,中心值为 4。我想要 0。左边有空白字段。

请帮我。

代码:

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);
}

}
4

0 回答 0