菜单像使用Skout和Android中触摸从一个视图滑动到另一(Menu like SKOUT an

2019-06-18 15:22发布

我想实现像FB或G +应用滑动菜单,我发现一些示例代码FB菜单演示和https://github.com/jfeinstein10/SlidingMenu

这些都是很好的开始,但我需要的东西,从他们身上多余的。 喜欢这里它仅适用于菜单按钮的点击,但我想用手势以及移动它。 我想有行为,有一个中心观点和正在走向正确的中心,一个视图将出现并在移动朝向左边,会出现菜单。 说有三个视图A,B,C,当我刷Ç向左然后出现,当我刷卡Ç向右那么B出现。 C是在A和B的中间

1.Middle视图向右移动

移动向右

2.移动向左侧中间视图

移动向左

现在我的问题是:什么是发展这样的意见的最佳实践。 我是从别人那我应该用碎片和查看传呼机以及听到。 那么,如何发展呢? 是否有任何人做任何样本实现? 任何帮助和建议表示赞赏。

参考文献见此应用使用这种类型的滑动的B / W视图的使用Skout应用

Answer 1:

最简单的解决办法可能是使用Android的内衣 ,已经边框刷卡建成的基础上,项目自述:

用户也将能够通过挡板从屏幕打开抽屉的左侧向右滑动手指,然后从右侧做相同的将其关闭,以控制抽屉。 如果要防止这种触摸功能,可以调用setDrawerEnabled(假)。



Answer 2:

你可以简单地使用TranslateAnimation上要一起弹出的褪色移动和另一个弹出窗口,供您菜单视图。 我在我的应用程序中实现它,它就像一个魅力。


代码

public class SlidingOptionsMenuActivity extends Activity {

    /**
     * Signifies that the menu is already visible
     */
    boolean alreadyShowing = false;
    /**
     * Width of the current window
     */
    private int windowWidth;
    /**
     * Height of the current window
     */
    private int windowHeight;
    /**
     * Reference of the {@link PopupWindow} which dims the screen
     */
    private PopupWindow fadePopup;
    /**
     * The translate animation
     */
    private Animation ta;
    /**
     * The view which needs to be translated
     */
    private RelativeLayout baseView;
    /**
     * Reference of the {@link LayoutInflater}
     */
    LayoutInflater inflater;

    /*
     * (non-Javadoc)
     * 
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Display display = getWindowManager().getDefaultDisplay();
        windowWidth = display.getWidth();
        windowHeight = display.getHeight();
        inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        findViewById(R.id.btnOptions).setOnClickListener(new OnClickListener() {

            /*
             * (non-Javadoc)
             * 
             * @see android.view.View.OnClickListener#onClick(android.view.View)
             */
            @Override
            public void onClick(View v) {
                if(!alreadyShowing){
                    alreadyShowing = true;
                    openSlidingMenu();
                }
            }
        });
    }


    /**
     * Fades the entire screen, gives a dim background
     */
    private void showFadePopup() {
        final View layout = inflater.inflate(R.layout.fadepopup, (ViewGroup) findViewById(R.id.fadePopup));
        fadePopup = new PopupWindow(layout, windowWidth, windowHeight, false);
        fadePopup.showAtLocation(layout, Gravity.NO_GRAVITY, 0, 0);
    }

    /**
     * Opens the sliding Menu
     */
    private void openSlidingMenu() {
        showFadePopup();
        // The amount of view which needs to be moved out. equivalent to the
        // width of the menu
        int width = (int) (windowWidth * 0.6f);
        translateView((float) (width));
        int height = LayoutParams.FILL_PARENT;
        // creating a popup
        final View layout = inflater.inflate(R.layout.option_popup_layout,(ViewGroup) findViewById(R.id.popup_element));

        final PopupWindow optionsPopup = new PopupWindow(layout, width, height, true);
        optionsPopup.setBackgroundDrawable(new PaintDrawable());

        optionsPopup.showAtLocation(layout, Gravity.NO_GRAVITY, 0, 0);

        optionsPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {

            public void onDismiss() {
                //Removing the fade effect
                fadePopup.dismiss();    
                //to clear the previous animation transition in
                cleanUp();
                //move the view out
                translateView(0);
                //to clear the latest animation transition out
                cleanUp();
                //resetting the variable
                alreadyShowing = false;
            }
        });
    }

    /**
     * This method is responsible for view translation. It applies a translation
     * animation on the root view of the activity
     * 
     * @param right The position to translate to
     */
    private void translateView(float right) {

        ta = new TranslateAnimation(0f, right, 0f, 0f);
        ta.setDuration(300);
        ta.setFillEnabled(true);
        ta.setFillAfter(true);

        baseView = (RelativeLayout) findViewById(R.id.baseView);
        baseView.startAnimation(ta);
        baseView.setVisibility(View.VISIBLE);
    }

    /**
     * Basic cleanup to avoid memory issues. Not everything is release after
     * animation, so to immediately release it doing it manually
     */
    private void cleanUp(){
        if (null != baseView) {
            baseView.clearAnimation();
            baseView = null;
        }
        if (null != ta) {
            ta.cancel();
            ta = null;
        }
        fadePopup = null;
    }
} //END of Class
//END of file

希望这将有助于。



Answer 3:

另一个开放源码库,我发现这一直是非常好的是SlidingMenu 。 它应该满足您的需求为您可以打开,并通过“菜单”点击通过边框刷卡关闭抽屉。 我发现一个动作条库等一起集成了这项ActionBarSherlock或johannilsson的Android,动作条库是简单地改变一行代码或两个库项目的问题。 自述为SlidingMenu库解释了如何与ABSherlock库整合。

有一两件事值得一提的是,SlidingMenu示例项目演示了许多不同的抽屉开合的动画。 这些都是一些我已经看到了这种风格的菜单/导航的最佳动画。



Answer 4:

有一个官方的方法...有用的和光(通过使用V4支持库):

创建一个抽屉式导航栏:

https://developer.android.com/training/implementing-navigation/nav-drawer.html



文章来源: Menu like SKOUT and Sliding from One View to Another by touch in Android