滚动滚动时如何移动布局?

时间:2014-12-17 21:44:21

标签: android android-layout scrollview android-animation

enter image description here

大家好,我想在scrolllView向上滚动时隐藏linearLayout。 我试着做下一个:  当我将手指向上移动1 px-将linearLayout向上移动1 px时,当LinearLayout变为不可见时,之后 - 将scrollview移动到顶部。

 scrollView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {                 
                    downXValue = event.getX();
                    downYValue = event.getY();
                    previousYvalue = downYValue;
                    break;
                }


                case MotionEvent.ACTION_UP: {
                    float currentY = event.getY();
                    if (downYValue < currentY) {
                        previousYvalue = 0;                   
                        ((CompanyInfoActivityNew) getActivity()).setPanelMargin(0);
                        margin=0;
                        Log.v("", "down");

                    }
                    if (downYValue > currentY) {
                        previousYvalue = 0;
                        ((CompanyInfoActivityNew) getActivity()).setPanelMargin(-230);
                        margin=-230;
                        Log.v("", "up");

                    }
                    //  }
                    break;
                }
                case MotionEvent.ACTION_MOVE: {
                    if (Math.abs(previousYvalue - event.getY()) >2) {
                        previousYvalue = event.getY();
                        switch ((int) margin) {
                            case 0://LinearLayout is visible
                                if ((event.getY() - downYValue) < 0) {
                                    margin = ((event.getY() - downYValue)) / 2;
                                    ((CompanyInfoActivityNew) getActivity()).movePanel(margin);
                                } else {
                                    v.onTouchEvent(event);
                                }
                                break;

                            case -230://linearLayout is invisible
                                if ((event.getY() - downYValue) > 0) {
                                    margin = ((event.getY() - downYValue)) / 2;
                                    ((CompanyInfoActivityNew) getActivity()).movePanel(margin);
                                } else {
                                    v.onTouchEvent(event);
                                }
                                break;

                            default:
                                if ((event.getY() - downYValue)>=-230 &&(event.getY() - downYValue)<=230  ) {
                                    margin = ((event.getY() - downYValue)) / 2;
                                    ((CompanyInfoActivityNew) getActivity()).movePanel(margin);
                                }
                                break;
                        }
                    }
                }
            }
            return true;
        }
    });


public void movePanel(double margin) {
    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) linearLayout1.getLayoutParams();
    int tempMargin = params.topMargin + (int) margin;
    if (tempMargin <= 0 && tempMargin >= -210) {
        params.setMargins(0, tempMargin, 0, 0);
        linearLayout1.setLayoutParams(params);
    }
}

1 个答案:

答案 0 :(得分:3)

看看Android-ObservableScrollView,它有很多这类动画的例子,它比你想做的要简单得多。