7

我正在尝试创建动画,就像在打开 2 个或更多选项卡时在 google chrome 中使用的一样。这是下面的图片。

我怎么能像在谷歌浏览器中那样制作这种效果。他们像 SlidingDrawer 一样动画(但据我所知,它不是一个slidingDrawer。)

在此处输入图像描述

4

1 回答 1

2

它与 Google chrome 效果不完全一样,但将来可能会对某人有所帮助。

public class MyActivity extends Activity implements View.OnTouchListener {

    ViewGroup _root;
    private int _xDelta;
    private int _yDelta;
    LinearLayout relativeLayout1;
    LinearLayout relativeLayout2;
    LinearLayout relativeLayout3;
    LinearLayout relativeLayout4;
    LinearLayout relativeLayout5;
    LinearLayout relativeLayout6;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main3);

        _root = (ViewGroup)findViewById(R.id.root);
        relativeLayout1 = new LinearLayout(this);
        relativeLayout2 = new LinearLayout(this);
        relativeLayout3 = new LinearLayout(this);
        relativeLayout4 = new LinearLayout(this);
        relativeLayout5 = new LinearLayout(this);
        relativeLayout6 = new LinearLayout(this);
        relativeLayout1.setOrientation(LinearLayout.VERTICAL);
        relativeLayout2.setOrientation(LinearLayout.VERTICAL);
        relativeLayout3.setOrientation(LinearLayout.VERTICAL);
        relativeLayout4.setOrientation(LinearLayout.VERTICAL);
        relativeLayout5.setOrientation(LinearLayout.VERTICAL);
        relativeLayout6.setOrientation(LinearLayout.VERTICAL);
        relativeLayout1.setId(1);
        relativeLayout2.setId(2);
        relativeLayout3.setId(3);
        relativeLayout4.setId(4);
        relativeLayout5.setId(5);
        relativeLayout6.setId(6);

        relativeLayout1.setBackgroundColor(Color.RED);

        relativeLayout2.setBackgroundColor(Color.BLUE);

        relativeLayout3.setBackgroundColor(Color.GREEN);

        relativeLayout4.setBackgroundColor(Color.GRAY);

        relativeLayout5.setBackgroundColor(Color.CYAN);

        relativeLayout6.setBackgroundColor(Color.DKGRAY);

        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300);
        relativeLayout1.setLayoutParams(layoutParams);
        _root.addView(relativeLayout1);

        RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300);

//        relativeLayout1.setOnTouchListener(this); // first element have to stay fixed
        relativeLayout2.setOnTouchListener(this);
        relativeLayout3.setOnTouchListener(this);
        relativeLayout4.setOnTouchListener(this);
        relativeLayout5.setOnTouchListener(this);
        relativeLayout6.setOnTouchListener(this);

        relativeLayout2.setLayoutParams(layoutParams1);
        relativeLayout3.setLayoutParams(layoutParams1);
        relativeLayout4.setLayoutParams(layoutParams1);
        relativeLayout5.setLayoutParams(layoutParams1);
        relativeLayout6.setLayoutParams(layoutParams1);

        _root.addView(relativeLayout2);
        _root.addView(relativeLayout3);
        _root.addView(relativeLayout4);
        _root.addView(relativeLayout5);
        _root.addView(relativeLayout6);
    }

    public boolean onTouch(View view, MotionEvent event) {
        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) view.getLayoutParams();
//                _xDelta = X - lParams.leftMargin;
                _yDelta = Y - lParams.topMargin;
//                System.out.println("getRawY"+(int)event.getRawY());
                System.out.println("DOWN=="+_yDelta);
                System.out.println("view height=="+ view.getHeight());
                System.out.println("root view="+_root.getHeight());

                break;
            case MotionEvent.ACTION_UP:
                System.out.println("getRawY="+(int)event.getRawY());
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                System.out.println("getRawYMOVE="+(int)event.getRawY());
                LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view.getLayoutParams();
//                layoutParams.leftMargin = X - _xDelta;
                int dif = Y - _yDelta;
                if (view.getHeight() + (dif) > 30){
                    if (dif < 0 && Math.abs(dif) >= view.getHeight()/5){
                            layoutParams.topMargin = dif;
                            view.setLayoutParams(layoutParams);
                    } else if (dif <= 0 && dif < view.getHeight()/5){
                        layoutParams.topMargin = dif;
                        view.setLayoutParams(layoutParams);
                    }

                    View p_view = findViewById(view.getId() - 1);
                    if (p_view.getId() != 1){

                        p_view.setLayoutParams(layoutParams);
                    }
                }

                break;
        }
        _root.invalidate();
        return true;
    }

}
于 2013-09-02T08:38:09.093 回答