Git Product home page Git Product logo

slidelayout's Introduction

SlideLayout

a simple slide layout library,just one java class file.
一个侧滑删除的库和demo,仅仅只是一个自定义控件搞定,提供了普通用法和listview,recyclerview用法实例。
关于滑动或touch功能,onTouchEvent方法可以搞定。但是本例没有这么复杂,借助ViewDragHelper工具类处理。
本例提供4种滑动效果:

  • options隐藏菜单跟随content布局滑动
  • options隐藏菜单固定在content底部,仅由content布局滑动
  • 从左侧滑出
  • 从右侧滑出
    仅仅以上4种效果,代码逻辑就开始有点复杂,故没有考虑options和content布局从上下两侧滑动。

============== #效果图
  #部分代码:
##activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:slide="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.duke.slidelayout.SlideLayout
        android:id="@+id/slideLayout"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        slide:canDrag="true"
        slide:contentResId="@layout/item_content"
        slide:optionsLayoutPosition="follow"
        slide:optionsResId="@layout/item_options"
        slide:slideDirection="right" />
    ...
</LinearLayout>

slide:contentResId="@layout/item_content" 内容布局,即上层布局
slide:optionsResId="@layout/item_options" 操作菜单布局,即下层布局

=

##MainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener,
    SlideLayout.OnOptionsStateChangeListener, SlideLayout.OnChildClickListener {  
    private SlideLayout slideLayout;  
    private Button setSlideDirection1, setSlideDirection2, setOptionsLayoutPosition1,  
    setOptionsLayoutPosition2, setOpenedfalse, setOpenedtrue;  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        slideLayout = (SlideLayout) findViewById(R.id.slideLayout);
        slideLayout.setOnOptionsStateChangeListener(this);
        slideLayout.setOnChildClickListener(this);

        setSlideDirection1 = (Button) findViewById(R.id.setSlideDirection1);
        setSlideDirection2 = (Button) findViewById(R.id.setSlideDirection2);
        setOptionsLayoutPosition1 = (Button) findViewById(R.id.setOptionsLayoutPosition1);
        setOptionsLayoutPosition2 = (Button) findViewById(R.id.setOptionsLayoutPosition2);
        setOpenedfalse = (Button) findViewById(R.id.setOpenedfalse);
        setOpenedtrue = (Button) findViewById(R.id.setOpenedtrue);
        setSlideDirection1.setOnClickListener(this);
        setSlideDirection2.setOnClickListener(this);
        setOptionsLayoutPosition1.setOnClickListener(this);
        setOptionsLayoutPosition2.setOnClickListener(this);
        setOpenedfalse.setOnClickListener(this);
        setOpenedtrue.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.setSlideDirection1:
                slideLayout.setSlideDirection(SlideLayout.SlideDirection.LEFT);
                break;
            case R.id.setSlideDirection2:
                slideLayout.setSlideDirection(SlideLayout.SlideDirection.RIGHT);
                break;
            case R.id.setOptionsLayoutPosition1:
                slideLayout.setOptionsLayoutPosition(SlideLayout.OptionsLayoutPosition.FIXED);
                break;
            case R.id.setOptionsLayoutPosition2:
                slideLayout.setOptionsLayoutPosition(SlideLayout.OptionsLayoutPosition.FOLLOW);
                break;
            case R.id.setOpenedfalse:
                slideLayout.setOpened(false);
                break;
            case R.id.setOpenedtrue:
                slideLayout.setOpened(true);
                break;
        }
    }

    @Override
    public void onOptionsViewChange(boolean isOpened) {
        Toast.makeText(this, isOpened ? "菜单打开" : "菜单关闭", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onChildClick(View view) {
        String string = "";
        if (view.getId() == R.id.content_root) {
            string = "内容点击";
        } else if (view.getId() == R.id.content_text) {
            TextView textView = (TextView) view;
            string = textView.getText().toString();
        } else if (view.getId() == R.id.options_root) {
            string = "操作菜单点击";
        } else if (view.getId() == R.id.tv_open) {
            TextView textView = (TextView) view;
            string = textView.getText().toString();
        } else if (view.getId() == R.id.tv_delete) {
            TextView textView = (TextView) view;
            string = textView.getText().toString();
        }
        Toast.makeText(MainActivity.this, string, Toast.LENGTH_SHORT).show();
    }
}

无论是content布局控件还是options布局控件的点击事件,我不清楚各自的id。
我统一都用SlideLayout.OnChildClickListener接口提供给您,具体是哪个点击了,请在回调中判断id,再做处理。
参考public void onChildClick(View view) 方法;

=====

至于在listview和recyclerview中的用法,请参考github库中的demo:
./demo/SlideLayout_listview
./demo/SlideLayout_recyclerview
###下面贴出效果图:  

 

更多资料请关注我的博客

slidelayout's People

Contributors

mengzhinan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

msmtmsmt123

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.