`
yangsongjing
  • 浏览: 249089 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

简单实现android侧边栏效果

阅读更多
用于项目中可能要用到此功能,于是就看了下相关代码,发现网上很多人的实现方式都是fragment和FrameLayout,但是看了后感觉都太麻烦了,于是我自己试着写了下,具体实现方式是一个页面两个VIew,一个作为菜单开始隐藏起来,一个作为展示页面,监听用户手势,在显示之前播放一个平移动画,隐藏也是如此,其他操作就和一个页面一样了,没什么区别能够很轻松的监听用户各种操作,出来打开和隐藏的时候稍有逊色之外其他的都要流畅一点。当然这是作为一个懒人的做法,哈哈。

动画代码:

            TranslateAnimation translate = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
translate.setDuration(1000);
findViewById(R.id.book_list).startAnimation(translate);
布局就是两个layout 水平并列,考虑适配机型 设置weight的值即可。就不上代码了

界面对应activity完整代码

public class TestActivity extends Activity
implements BookListFragment.Callbacks,OnTouchListener,OnGestureListener {
GestureDetector detector;

public TestActivity() {
    detector = new GestureDetector(this);
}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载/res/layout目录下的activity_book_twopane.xml
        setContentView(R.layout.activity_book_twopane);
        LinearLayout tv = (LinearLayout) findViewById(R.id.linearLayout);
        //设置tv的监听器 
        tv.setOnTouchListener(this); 
        tv.setFocusable(true);
        //必须,view才能够处理不同于Tap(轻触)的hold
        tv.setClickable(true); 
        tv.setLongClickable(true); 
        detector.setIsLongpressEnabled(true); 
        detector.setIsLongpressEnabled(true);
        findViewById(R.id.book_list).setVisibility(View.GONE);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_test_fragment, menu);
        return true;
    }

    //实现Callbacks接口必须实现的方法
@Override
public void onItemSeleted(int id) {
//创建Bundle对象,准备向Fragment传入参数
Bundle arguments = new Bundle();
arguments.putInt(BookDetailFragement.ITEM_ID, id);
//创建BookDetailFragment对象
BookDetailFragement fragment = new BookDetailFragement();
//向Fragment中传入参数
fragment.setArguments(arguments);
//使用fragment替换book_detail_container容器当前显示的Fragment
getFragmentManager().beginTransaction()
.replace(R.id.book_detail_container, fragment).commit();
}

@Override
public boolean onTouch(View v, MotionEvent event) {
return detector.onTouchEvent(event); 
}

@Override
public boolean onDown(MotionEvent e) {
        // Toast.makeText(this, "onDown", Toast.LENGTH_SHORT).show(); 
        return true; 
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
       
        // 参数解释: 
        // e1:第1个ACTION_DOWN MotionEvent 
        // e2:最后一个ACTION_MOVE MotionEvent 
        // velocityX:X轴上的移动速度,像素/秒 
        // velocityY:Y轴上的移动速度,像素/秒 
     
        // 触发条件 : 
        // X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒 
         
        final int FLING_MIN_DISTANCE = 100, FLING_MIN_VELOCITY = 200; 
        if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) { 
            // Fling left 
            // Toast.makeText(this, "Fling Left", Toast.LENGTH_SHORT).show();
        TranslateAnimation translate = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
translate.setDuration(1000);
findViewById(R.id.book_list).startAnimation(translate);

// findViewById(R.id.book_list).setVisibility(View.GONE);
        } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE && Math.abs(velocityX) > FLING_MIN_VELOCITY) { 
            // Fling right 
            // Toast.makeText(this, "Fling Right", Toast.LENGTH_SHORT).show(); 
        findViewById(R.id.book_list).setVisibility(View.VISIBLE);
       
            TranslateAnimation translate = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f);
translate.setDuration(1000);
findViewById(R.id.book_list).startAnimation(translate);
        } else if(e2.getY()-e1.getY()>FLING_MIN_DISTANCE && Math.abs(velocityY)>FLING_MIN_VELOCITY) {
            // Fling down 
            // Toast.makeText(this, "Fling down", Toast.LENGTH_SHORT).show();
        } else if(e1.getY()-e2.getY()>FLING_MIN_DISTANCE && Math.abs(velocityY)>FLING_MIN_VELOCITY) {
            // Fling up 
            // Toast.makeText(this, "Fling up", Toast.LENGTH_SHORT).show();
        } 
       
       
        return false;
        
}

@Override
public void onLongPress(MotionEvent e) {
// Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show(); 
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// Toast.makeText(this, "onScroll", Toast.LENGTH_LONG).show(); 
        return true; 
}

@Override
public void onShowPress(MotionEvent e) {
// Toast.makeText(this, "onShowPress", Toast.LENGTH_SHORT).show(); 
}

@Override
public boolean onSingleTapUp(MotionEvent e) {
// Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_SHORT).show(); 
        return true;
}
}
1
0
分享到:
评论

相关推荐

    android侧边栏效果

    在Android应用开发中,...总之,实现Android侧边栏效果需要对手势检测、布局设计、动画以及状态管理有深入理解。通过"TestSideShowApp"实例,你可以看到这些知识点是如何结合在一起的,从而提升自己的Android开发技能。

    Android侧边栏滑动【两个源码】

    本文将深入探讨Android侧边栏滑动的实现原理,并基于提供的两个源码进行解析。 首先,Android侧边栏滑动主要依赖于手势检测和布局动画。在Android SDK中,我们可以使用`GestureDetector`类来检测用户的滑动手势,...

    android侧边栏滑动

    本文将深入探讨如何在Android中实现侧边栏滑动的效果。 首先,实现侧边栏滑动的关键组件是`NavigationView`,它是Android Support Library中的一个视图组件。`NavigationView`设计用于放置在`DrawerLayout`的左侧,...

    Android侧边栏

    开发者可以根据自己的项目特点选择合适的效果,或者通过研究这些实例来学习如何实现自定义的侧边栏效果。 1. **基础侧边栏实现**:这是最简单的侧边栏实现,通常基于`NavigationView`组件,配合`DrawerLayout`来...

    qq侧边栏效果 sliding效果大全

    侧边栏效果实现的关键在于触摸事件的处理和视图的平滑过渡。在Android开发中,可以使用SlidingPaneLayout或者DrawerLayout来实现这一效果。这两个布局组件都是Android SDK提供的,用于构建可滑动的侧边栏。...

    Fragment使用—侧边栏

    本教程将重点讲解如何利用Fragment来实现一个简单的侧边栏。 首先,理解Fragment的基本概念是非常重要的。Fragment有自己的生命周期,并且可以独立于Activity进行操作。通常,Fragment包含一个UI布局,并且可以与...

    ce_java_android各种侧面_测边栏样式_android_源码

    本资源“ce_java_android各种侧面_测边栏样式_android_源码”提供了多种不同风格的侧边栏实现,旨在帮助开发者了解并实现丰富的侧边栏效果。下面将详细解析这些知识点。 1. **Android原生风格侧边栏样式** Android...

    swift-LMSideBarController是一个简单的iOS侧边栏效果

    Swift-LMSideBarController是专为iOS开发者设计的一个轻量级组件,它提供了便捷的方式来实现类似Android或许多桌面应用中的侧滑菜单效果。这个库由Luming Min开发,并且基于Swift编程语言,使得iOS应用能够拥有美观...

    Android ResideMenu 仿IOS侧边栏滑动效果

    总结来说,Android ResideMenu是一个强大的工具,可以帮助开发者轻松实现类似iOS的侧边栏滑动效果。通过简单的集成和配置,你可以为Android应用带来更加优雅的用户体验。记住,设计良好的用户界面对于任何应用的成功...

    List+DrawableLayout实现侧边栏、简单易懂

    7. **测试与优化**:在不同设备和Android版本上测试应用,确保侧边栏效果的稳定性和一致性。根据反馈进行调整,优化滑动流畅度和视觉效果。 通过以上步骤,我们可以使用ListView和DrawableLayout轻松创建一个功能...

    动画侧边栏AndroidResideMenu-master

    总结来说,AndroidResideMenu是一个强大的工具,它简化了Android应用开发中侧边栏功能的实现,同时提供了丰富的动画效果和高度的可定制性。开发者可以通过这个库,为自己的应用增添一份独特的魅力,提升用户的使用...

    安卓Android源码——侧边栏滑动.7z

    3. **手势识别**:Android系统支持滑动手势,`DrawerLayout`能够监听并处理这些手势,使得用户可以通过简单的滑动操作打开和关闭侧边栏。 4. **菜单资源**:侧边栏的内容通常通过XML菜单资源定义,位于`res/menu/`...

    侧边栏+圆头像+imageloader

    首先,侧边栏(SlidingMenu)是Android应用中常用的一种滑动菜单效果,它通常隐藏在主屏幕的左侧或右侧,通过滑动屏幕边缘可以将其拉出。SlidingMenu库提供了一种简单的方法来实现这种效果。它支持自定义菜单内容,...

    安卓SlidingMenu各种菜单侧滑菜单相关-Android实现过目难忘的侧边栏slideMenu效果.rar

    在这个“安卓SlidingMenu各种菜单侧滑菜单相关-Android实现过目难忘的侧边栏slideMenu效果.rar”压缩包中,包含了实现此类功能的相关代码和资源,可能包括自定义布局、动画效果和事件处理等方面的知识。 首先,我们...

    安卓自己修改的侧边栏

    为了实现滑动时弹出侧边栏的效果,我们需要在Activity中添加手势检测。可以使用`GestureDetector`和`SwipeRefreshLayout`等组件,或者自定义滑动手势监听。例如,使用 GestureDetector 的简单实现: ```java ...

    ToolBar+NavigationDraw实现炫酷的侧边栏

    接下来,我们将深入探讨如何使用这两个组件来实现一个炫酷的侧边栏。 首先,ToolBar是Android Design Support Library中的一个控件,它提供了Material Design风格的Action Bar。在布局文件中,你可以通过<androidx....

    03-01 侧边栏SlidingDemo

    总的来说,"03-01 侧边栏SlidingDemo"是一个关于如何在Android应用中实现抽屉式导航菜单的实例。通过学习这个示例,开发者可以掌握使用`DrawerLayout`、`ActionBarDrawerToggle`以及其他相关组件和技术来构建具有侧...

    Android应用源码之基于Fragment实现Tab的切换,滑出侧边栏.zip

    在Android开发中,创建具有可切换Tab和滑出侧边栏的用户界面是常见的需求,尤其是在构建复杂的移动应用时。这个源码示例是关于如何使用`Fragment`和相关组件来实现这一功能的实践教程。下面我们将深入探讨相关知识点...

    NavigationDraw_Circleimg侧边栏圆形头像动态图标

    在“NavigationDraw_Circleimg侧边栏圆形头像动态图标”这个项目中,开发者对Android Studio内置的Navigation Drawer Activity进行了自定义改造,实现了更加美观且具有交互反馈效果的界面元素。 首先,我们将讨论...

Global site tag (gtag.js) - Google Analytics