精华内容
下载资源
问答
  • Android 支持拖拽排序的流式标签布局 
  • android拖动布局Demo

    2014-06-18 11:18:42
    一个拖动布局的demo,从别的地方找的觉得还可以,望共享
  • import android.content.Context import android.util.AttributeSet import android.view.MotionEvent import android.widget.RelativeLayout import kotlin.math.abs class CustomDragView @JvmOverloads constru

    效果图如下:

    1. 自定义view如下:

    package com.example.myapplication
    
    import android.content.Context
    import android.util.AttributeSet
    import android.view.MotionEvent
    import android.widget.RelativeLayout
    import kotlin.math.abs
    
    class CustomDragView @JvmOverloads constructor(
        context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
    ) : RelativeLayout(context, attrs, defStyleAttr) {
    
        private var mWidth = 0
        private var mHeight = 0
        private var screenWidth = 0
        private var screenHeight = 0
    
        private var downX = 0f
        private var downY = 0f
    
        //是否拖动
        var isDrag = false
    
        override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec)
            mWidth = measuredWidth
            mHeight = measuredHeight
            screenWidth = ScreenUtil.getScreenWidth(context)
            screenHeight = ScreenUtil.getScreenHeight(context)
        }
    
        override fun onTouchEvent(event: MotionEvent): Boolean {
            if (this.isEnabled) {
                when (event.action) {
                    //DOWN时,即刚开始的触摸点相对view的坐标。
                    MotionEvent.ACTION_DOWN -> {
                        isDrag = false
                        downX = event.x
                        downY = event.y
                    }
                    MotionEvent.ACTION_MOVE -> {
                        //滑动的距离 = 触摸点滑动到的坐标 - 开始触摸的坐标 (都是相对于view本身)
                        val xDistance = event.x - downX
                        val yDistance = event.y - downY
                        var l: Int
                        var r: Int
                        var t: Int
                        var b: Int
                        //当水平或者垂直滑动距离大于10,才算拖动事件
                        if (abs(xDistance) > 10 || abs(yDistance) > 10) {
                            isDrag = true
                            l = (left + xDistance).toInt()
                            r = l + mWidth
                            t = (top + yDistance).toInt()
                            b = t + mHeight
                            //不划出边界判断,此处应按照项目实际情况,因为本项目需求移动的位置是手机全屏,
                            // 所以才能这么写,如果是固定区域,要得到父控件的宽高位置后再做处理
                            if (l < 0) {
                                l = 0
                                r = l + mWidth
                            } else if (r > screenWidth) {
                                r = screenWidth
                                l = r - mWidth
                            }
                            if (t < 0) {
                                t = 0
                                b = t + mHeight
                            } else if (b > screenHeight) {
                                b = screenHeight - mHeight
                                t = b - mHeight
                            }
                            layout(l, t, r, b)
                        }
    
                    }
    
                    MotionEvent.ACTION_UP -> {
                        // 这里宽度必须确定宽高
                        val params = LayoutParams(mWidth, mHeight)
                        params.setMargins(left, top, 0, 0)
                        layoutParams = params
                        isPressed = false
                    }
                    MotionEvent.ACTION_CANCEL -> isPressed = false
    
                }
                return true
            }
            return false
        }
    
    }
    

    使用到的工具类:

    package com.example.myapplication;
    
    import android.content.Context;
    import android.util.DisplayMetrics;
    import android.view.Display;
    import android.view.View;
    import android.view.WindowManager;
    
    public class ScreenUtil {
    
        private static int width = 0;
        private static int height = 0;
        private static int showHeight = 0;
        private static int statusHeight = 0;
        private static float density = 0;
    
        public static int getScreenWidth(Context context) {
            if (width == 0) {
                WindowManager manager = (WindowManager) context
                        .getSystemService(Context.WINDOW_SERVICE);
                Display display = manager.getDefaultDisplay();
                width = display.getWidth();
            }
            return width;
        }
    
        public static int getScreenHeight(Context context) {
            if (height == 0) {
                WindowManager manager = (WindowManager) context
                        .getSystemService(Context.WINDOW_SERVICE);
                Display display = manager.getDefaultDisplay();
                height = display.getHeight();
            }
            return height;
        }
    
        public static int getScreenShowHeight(Context context) {
            if (showHeight == 0) {
                showHeight = getScreenHeight(context) - getStatusBarHeight(context);
            }
            return showHeight;
        }
    
        public static int getStatusBarHeight(Context context) {
            if (statusHeight > 0) {
                return statusHeight;
            }
            Class<?> c = null;
            Object obj = null;
            java.lang.reflect.Field field = null;
            int x = 0;
            try {
                c = Class.forName("com.android.internal.R$dimen");
                obj = c.newInstance();
                field = c.getField("status_bar_height");
                x = Integer.parseInt(field.get(obj).toString());
                statusHeight = context.getResources().getDimensionPixelSize(x);
                return statusHeight;
            } catch (Throwable e) {
                e.printStackTrace();
            }
            return statusHeight;
        }
    
        public static float getScreenDensity(Context context) {
            if (density == 0) {
                try {
                    DisplayMetrics dm = new DisplayMetrics();
                    WindowManager manager = (WindowManager) context
                            .getSystemService(Context.WINDOW_SERVICE);
                    manager.getDefaultDisplay().getMetrics(dm);
                    density = dm.density;
                } catch (Exception ex) {
                    ex.printStackTrace();
                    density = 1.0f;
                }
            }
            return density;
        }
    
        public static float getScreentMinLength(Context context) {
            return Math.min(getScreenHeight(context), getScreenWidth(context));
        }
    
        /**
         * 根据指定k的系数获取屏幕在max范围内的最大长宽,默认宽比较小
         *
         * @param context
         * @param k
         * @return
         */
        public static DrawWrap getCutWrap(Context context, float k, float max) {
            float tWidth = getScreenWidth(context);
            float tHeight = getScreenHeight(context);
    
            if (tWidth * max * k > tHeight) {
                return new DrawWrap(tHeight * max / k, tHeight * max);
            } else {
                return new DrawWrap(tWidth * max, tWidth * max * k);
            }
        }
    
        public static class DrawWrap {
            public float width;
            public float height;
    
            public DrawWrap(float width, float height) {
                this.width = width;
                this.height = height;
            }
        }
    
        public static int dip2px(Context context, float dipValue) {
            return (int) (dipValue * getScreenDensity(context) + 0.5f);
        }
    
        /**
         * 将sp值转换为px值,保证文字大小不变
         *
         * @param context
         * @param spValue (DisplayMetrics类中属性scaledDensity)
         * @return
         */
        public static int sp2px(Context context, float spValue) {
            final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
            return (int) (spValue * fontScale + 0.5f);
        }
    
        /**
         * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
         */
        public static int px2dip(Context context, float pxValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }
    
        /**
         * 获取屏幕中控件顶部位置的高度--即控件顶部的Y点
         *
         * @return
         */
        public static int getScreenViewTopHeight(View view) {
            return view.getTop();
        }
    
        /**
         * 获取屏幕中控件底部位置的高度--即控件底部的Y点
         *
         * @return
         */
        public static int getScreenViewBottomHeight(View view) {
            return view.getBottom();
        }
    
        /**
         * 获取屏幕中控件左侧的位置--即控件左侧的X点
         *
         * @return
         */
        public static int getScreenViewLeftHeight(View view) {
            return view.getLeft();
        }
    
        /**
         * 获取屏幕中控件右侧的位置--即控件右侧的X点
         *
         * @return
         */
        public static int getScreenViewRightHeight(View view) {
            return view.getRight();
        }
    
        /*
         * 获取控件宽
         */
        public static int getWidth(View view) {
            int w = View.MeasureSpec.makeMeasureSpec(0,
                    View.MeasureSpec.UNSPECIFIED);
            int h = View.MeasureSpec.makeMeasureSpec(0,
                    View.MeasureSpec.UNSPECIFIED);
            view.measure(w, h);
            return (view.getMeasuredWidth());
        }
    
        /*
         * 获取控件高
         */
        public static int getHeight(View view) {
            int w = View.MeasureSpec.makeMeasureSpec(0,
                    View.MeasureSpec.UNSPECIFIED);
            int h = View.MeasureSpec.makeMeasureSpec(0,
                    View.MeasureSpec.UNSPECIFIED);
            view.measure(w, h);
            return (view.getMeasuredHeight());
        }
    
    }
    
    

    2.xml中使用:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity4">
    
        <com.example.myapplication.CustomDragView
            android:id="@+id/customView"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@color/purple_700" />
    
    </RelativeLayout>
    
    展开全文
  • Android拖拽布局ConstraintLayout

    千次阅读 2018-01-16 17:27:33
    记录下来用于个人记忆 要用到ConstraintLayout需要在app.gradle中添加依赖: ...ConstraintLayout类似RelativeLayout,通过约束内部控件进行布局,不过ConstraintLayout要更加强大,ConstraintLayout

    记录下来用于个人记忆

    要用到ConstraintLayout需要在app.gradle中添加依赖:

    implementation 'com.android.support:constraint-layout:1.0.2'

    ConstraintLayout类似RelativeLayout,通过约束内部控件进行布局,不过ConstraintLayout要更加强大,ConstraintLayout的好处在于可以通过约束来减少布局的嵌套.

    创建ConstraintLayout后,切换布局文件由xml编辑(text)转换成拖拽操作(Design)

    第一步从左边的控件列表中,拖拽控件到ConstraintLayout内,


    点击控件后,控件的上下左右各有一个小圆点


    要想让某个控件处于ConstraintLayout的顶部,就拖动控件上方的小圆点到最上方,然后小圆点的主人就会在ConstraintLayout内处于顶部,处于右边就拖动右边的小圆点.想让其处于右上角就拖动上面的小圆点然后再拖动右边的小圆点就可以了


    调整控件的边距,大小,文字等属性,先选中控件,然后在右边就会显示该控件拥有的属性供调整


    上图中的方形区域,点击加号或者数值(如图上的228)后,就可以手动修改该控件与屏幕的距离

    ConstraintLayout中控件与控件的位置处理,如果想让控件A处于控件B的正下方,先点击控件A然后拖动其左边的小圆点与控件B左边的小圆点相连接,然后拖动控件A右边的小圆点与控件B右边的小圆点相连接,最后拖动控件A上方的小圆点与控件B下方的小圆点相连接,

    最后一图因为两个小圆点想接触,两个布局就挨到一起了,我没碰到一起只是为了演示,正确的做法是一定要两个圆点接触到一起才行的

    注意,有的控件默认会给边距,所以看起来会没有对其,点击控件,在右边的该参数区域修改既可

    这样做的话,下方的控件就和上方的控件绑定了,拖动上方的控件,就会带着下方的控件一起动


    如果想要调整上下间距就拖动下方的控件上下挪动既可

    如果想调整2个控件的上下间距的话,就拖动下方的控件上下挪动,中间会显示数字表示距离,单位是dp


    未完结






















    展开全文
  • Android 一个子view可以拖动排序的布局控件,实现拖拽如此简单。
  • 因为所有的视图都根据与同级或父级的关系来布局,所以和相对布局有点相似,但是通过Android的试图编辑器比相对布局更加稳定和简单。 因为布局的API和布局的编辑器是相互关联的,所以你只能通过布局编辑器来使用...

    通过约束性布局快速开发UI


    约束性布局允许你通过扁平的视图结构图(没有嵌套视图组)来创建复杂的布局。因为所有的视图都根据与同级或父级的关系来设置,所以和相对布局有点相似,但是Android的视图编辑器比相对布局更加地稳定和简单。


    因为布局的API和布局的编辑器是相互关联的,所以你只能通过布局编辑器来使用约束性布局。你可以通过拖拽代替编辑XML的方式来创建布局。


    图1:编辑器里面的约束性布局


    从Android2.3(API 19)开始支持约束性布局,从Android Studio 2.2开始可以使用约束性布局编辑器。


    下面展示了在Android Studio中创建约束性布局的过程。如果你想知道更多关于编辑器的信息,可以参考Android Studio的官方指南Build a UI with Layout Editor(https://developer.android.com/studio/write/layout-editor.html)。


    约束性布局预览

    为了确定组件在约束性布局中的位置,你必须添加两个或者多个约束性组件。每个约束代表了与另一个组件、父布局的关系、对齐方式或者说是无形的指南。每个约束通过组件的横纵坐标定义了组件的位置,所以每个组件至少需要有一个约束性坐标,但是通常需要多个。


    当你拖动一个组件到布局编辑器中时,即使没有约束信息,编辑器也会将组件放在你所拖动到的位置。然后,这只是方便了编辑,如果组件没有约束信息,当你在机器上运行时,这个组件会显示到坐标[0,0](左上角)。


    在图2种,组件在布局编辑器中显示正常,但是TextView B并没有纵向的约束信息。当在机器上运行时,由于没有约束信息,TextView B显示到了屏幕的左上角

    图2.TextView B缺少了纵向约束信息



    图3.TextView B与ImageView的纵向垂直


    尽管缺少约束性信息并不会引起编译错误,布局编辑器也会在工具栏里显示一个缺少约束信息的错误。如果要查看错误或者其它警告,点击Show Warnings and Errors.为了避免缺少约束性信息,布局编辑器可以通过自动推断( Autoconnect and infer constraints )功能将约束信息给你添加上。


    为你的项目添加约束布局

    下面是在项目中使用约束布局的步骤:

    1.确保有最新的Constraint Layout library:

    1.点击Tools > Android > SDK Manager

    2.点击标签页SDK Tools

            3.展开Support Repository 并点击ConstraintLayout for Android 和Solver for ConstraintLayout.查看包信息和你所下载的版本信息(下面将用到)

             4.点击OK

             5.在build.gradle文件中添加ConstraintLayout Library的依赖

    dependencies {
        compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
    }

          这里下载的library版本可能有点高,以此来适应步骤3种下载的版本。

                6.在工具栏或者是同步提示中,点击Sync Project with Gradle Files.

    现在你可以通过约束性布局开发你的布局了。


    注:

    打开SDK Manager


    选择tab页并选中ConstraintLayout for Android and Solver for ConstraintLayout,点击OK


    将依赖添加进module层的build.gradle




    转换成约束性布局

    将普通布局转换成约束性布局的步骤如下:

    1.在Android Studio中打开所要编辑的布局,并点击窗口下方的tab页Design

    2.在Component Tree窗口中,在布局上点击鼠标右键并选择Convert layout 头ConstraintLayout


    图4.转换成约束性布局的菜单选项


    注:

    这是一个从其它项目拷贝的普通的布局


    点击窗口下方的标签页design


    在Component Tree窗口中点击布局并选中Convert Layout to ConstraintLayout.


    再选中tab页text中时,可以看到RelativeLayout转换成了ConstraintLayout



    创建一个新的约束性布局

    创建一个新的约束性布局的步骤如下:

    1.在项目窗口的任何位置点击鼠标,然后选择File->New->XML->Layout XML.

    2.在root tag中输入"android.support.constraint.ConstraintLayout"

    3.点击Finish

    注:在root tag中输入


    可以看到生成的布局中包含ConstraintLayout





    添加约束信息

    从Palette创建中将组件拖动到编辑器中。将向ConstraintLayout中添加一个组件后,将会显示一个可以任意调整大小的方框。

    点击来选中这个组件。长按并拖拽到可以移动到的地方(另一个view的边缘,布局的边缘,或者是指导线)。当松手时,约束信息将会被创建,可以通过默认的margin值来分开两个组件。


    当创建约束时,遵守下面的原则:

    --- 每个组件至少包含两个约束信息:横向的约束信息和纵向的约束信息

    ---  你约束手柄与相同类型的约束手柄之间建立联系。所以组件的纵向(左侧和右侧)只能被另一个组件的纵向约束;一个组件的基准线只能被另一个组件的基准线来约束。

    --- 每个约束手柄只能约束一次,但是你可以将不同的组件的约束手柄指向该组件的同一个约束手柄源来实现多个约束。


    如果要移除一个约束信息,选择相应的组件并点击约束手柄。


    如果你为一个组件添加了与已存在的约束相对应的约束,则会生成像弹簧一样的线。当组件在约束信息之间时效果会更加明显。如果你希望组件能够调整大小满足约束信息,将组件的大小设置为“any size”;如你只是希望移动组件的位置但是并不希望调整大小,那就调整约束。


    有很多方式对一个组件进行约束,但是下面是一些基本的用法。

    注:

    从Palette中将一个Button拖入编辑界面,最右边的方框是可以随意拖动调整大小的


    可以随便调整大小的方框




    通过父控件来约束

    调整控件边缘以满足在布局中的合适位置。

    在图5中,组件的左边缘与父布局的左边缘相连。


    图5.相对应父布局的横向约束


    位置约束

    通过横向和纵向约束来跳转两个控件显示的位置。

    图6是一个Button在Imageview下面24dp的约束。


    图6.一个纵向的约束


    对齐约束

    将一个组件与另一个组件的边缘对齐。

    在图7中,Button的左边与ImageView的左边相对齐。


    图7.对齐约束


    你也可以通过拖拽来实现偏移对齐约束。如图8所示Button与ImageView的边缘向右偏移24dp的位置对齐。偏移约束由组件的margin来定义。


    图8.横向偏移对齐约束


    基准线对齐约束

    将一个TextView的基准线与另一个TextView的基准线对齐。

    在图9种,TextView第一行的字体与Button中的字体对齐。

    为了创建基准线约束,你的鼠标需要在基准线约束手柄上停留2s制动手柄显示为白色。然后再点击并拖拽基准线,到相对于另一个组件的基准线的合适位置。



    创建指导线

    你可以将指导线添加到约束信息中。你可以在布局中为控件的边缘添加以dp为单位或者百分比形式的指导线。

    点击工具栏中的Guidelines图标,然后选择Add Vertical Guideline或者Add Horizontal Guidline.

    点击知道先旁边的包含左箭头的圆形图标来画指导线的位置(到布局边缘的dp距离或者是百分比距离)

    指导线对用户来说是不可见的。


    注:

    点击基准线图标,然后点击控件,移动控件的边缘来确定组件的位置




    约束的自动链接和自动推断

    自动推断是为布局中的每个组件自动添加两个或多个约束信息。自动推断默认是禁止的。你可以在布局编辑器的工具栏中点击Turn on Autoconnect来打开自动推断。

    当打开自动推断功能时,将自动为每个组件添加约束信息;它并不创建约束信息。如果你已经为一个拖进来的空间添加了约束信息,约束信息将不会改变(margin也不改变),所以如果你想重新为组件定位时,你必须删除原来的约束信息。

    你也可以通过点击Infer Constraints来为布局中所有的控件添加约束信息。

    自动推断是根据布局来决定每个控件的位置一次性为所有的控件添加约束信息,所以相距很远的组件之间也可能创建约束信息。然而自动链接只是为你你所添加的一个组件添加约束信息,而且只与最近的组件创建约束信息。无论哪种情况,你都可以点击约束手柄并删除,来重新创建新的约束。


    调整空间的大小

    你可以通过组件四角的手柄来调整组件的大小,但是你应该避免使用这种将组件的宽高进行硬编码的方式,因为硬编码不利于适配。通过选择窗口右边编辑器中的Properties来选择自动调整大小的模式或是更多定义大小的方式。图10所示的是窗口上方显示的是inspector。



    图10.属性界面包括了控制(1)大小,(2)边距,(3)偏移量约束


    灰色的方框代表所选中的控件。方框内部的符合的定义如下:

    Wrap Content:组件根据控件中的内容来调整大小

    Any Size:根据约束条件来决定控件的大小。由于控件没有定义大小,所以实际的值是0dp,但是会根据约束条件来自动调整组件的大小。但是如果该组件只定义了一个约束条件,则会根据组件中的内容来调整控件的大小。另一种方式是“match constraints”(不是match_parent),控件大小为测算每个约束条件和边距后的最大空间的大小。

    Fixed:指定了控件的大小或者在编辑器中跳转控件的大小。

    如果要进行改变,点击那些符号。

    注意:在约束性布局中不要使用任何match_parent,而要用"Any Size"(0dp)代替



    调整约束偏移量

    当为一个控件的两侧都添加了约束时(并且大小设置的是“fixed”或者是“wrap content”),然后该组件位于两个句柄的中间。当控件位于正中间时,偏移量是50%。你可以通过拖拽属性界面的滑动条来调整大小,也可以通过拖拽控件的位置来调整。

    如果你想让控件自适应约束,将大小改为“any size”


    调整控件的边距

    为了让控件均匀地分布,点击工具栏中的Mrgin图标来为添加到布局中的每个控件设置默认的margin值。按钮上显示了现在的margin值。margin只是改变了当前所编辑的控件的值。


    图11.工具栏中的margin按钮。点击调整默认的margin值。


    所有的默认的margin值都是Material Design所建议的8dp。

    注:将studio版本更新到2.2.0,需要更改project的build.gradle文件,将gradle plugin的版本改到2.14

    classpath 'com.android.tools.build:gradle:2.1.4'





    原文地址:https://developer.android.com/training/constraint-layout/index.html#add-a-constraint


    参考资料:http://gold.xitu.io/entry/575059535bbb500059b0b608

    http://www.jianshu.com/p/792d2682c538

    http://www.wuji8.com/meta/91969616.html

    展开全文
  • Android的3.0之后,google又提出了属性动画的这样一个框架,他可以更好的帮助我们实现更丰富的动画效果。所以为了跟上技术的步伐,今天就聊一聊属性动画。 这一次的需求是这样的:当点击一个View的时候,显示下面...
  • 本文主要使用的就一个方法...布局使用的是百分比布局(PercentFrameLayout),虽然过时了,但是可以使用ConstraintLayout来进行实现 这是GitHub地址 https://github.com/buttonXin/customChildView 详细的信息都有注...
    • 本文主要使用的就一个方法 View.OnDragListener ,view.startDrag()
    • 先看下效果,使用模拟器不是很灵敏
    • 布局使用的是百分比布局(PercentFrameLayout),虽然过时了,但是可以使用ConstraintLayout来进行实现
    • 这是GitHub地址 https://github.com/buttonXin/customChildView
    • 详细的信息都有注释,主要看 CustomChildLayout这个类就行了
    • 如果有什么不懂可以体格issues,或者这里讨论下
    展开全文
  • 前几天发现ios系统的滚动布局可以支持双指连续下拉/上拉的操作,Android系统提供的控件没有实现这样的效果,决定自己写一个。实现思路因为需要定制了一个可以上拉/下拉,松手后回弹效果的ScrollView(当然也可以是...
  • android 自定义拖动控件。控件可以在界面上自由拖动位置显示。自定义图标背景颜色及默认显示的位置。
  • Android布局拖动图片到指定区域里

    热门讨论 2012-07-03 10:20:45
    Android布局 拖动图片 长按Anroid小人后,拖入蓝色区域内,有缺陷,望各位高手改善
  • Android拖拽、回弹布局

    2021-06-03 02:00:06
    在边界拖拽会出现关闭提示。这次同时实现了Android端和IOS端的效果。先讲解Android端的实现吧,毕竟我是个Android开发仔呀效果如下图:Android端弹出来的页面可以左右切换,每个页面是单独的列表,能上下滑动,所以...
  • android-drag-FowLayoutthis is a draggable flow layout lib (android拖拽的流布局库) . support android-x Sample apk/示例app 特点1, 类似可拖拽的GridView. 不过gridView 宽度/个数是固定的。 这个布局item...
  • 上下两个LinearLayout,上面的LL中有一个RecyclerView,显示...下面的LL是空的,想把上面LL中RLV中的图片拖动到下面的LL中,被拖动的图片 不会从RLV中移除,还要有拖动效果,怎么实现啊?(不知道我描述的是否清楚)
  • 注:我想实现的是使视图拖动旋转和2指量表(拖单指也) 我代码来自谷歌的跟随拖动文件使它不跳时,开关的手指。 我使用这个旋转 视图。animate() rotationby(一)。。setDuration(0)。setinterpolator(新...
  • qq_喷泉_02017-07-25 13:08已采纳xmlns:app=...
  • Android自定义可拖动的悬浮布局

    千次阅读 2018-08-06 20:11:17
    拖动 这个自定义的View是继承RelativeLayout的,所以在写xml布局的时候直接当成RelativeLayout使用即可。 由于在该类中注释的很清楚,在这里我就不再累赘直接上代码 public class MyDragView extends ...
  • 布局拖动 安卓

    2015-12-02 10:09:21
    实现布局拖动 自定义布局 实现 单手指 拖动 简单的demo
  • 支持多个RecycleView里的item布局互相拖动
  • 主要为大家详细介绍了android实现上下左右滑动的界面布局,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动。...开始今天的正题, 虽然Android的控件和布局方式都可以拖拽实现,今天为了更详细的了解控件和布局,我们就用纯代码的形式来进
  • 可以让你在Activity/Fragment中自动生成findViewById等布局相关初始化代码 或者在Adapter中自动生成ViewHolder代码
  • 在原作者ikaiser上优化,感谢ikaiser大神 目前已经支持根据JSON文件加载布局样式 AJAX请求里面的内容 设置布局格式121 31等 拖拽DIV调整布局 保存布局时console出JSON字符串。
  • 我正在制作一个Android应用程序.我有一个场景.首先看下面的屏幕截图,所以任何一个人来这里回答有一些清晰的图片,我想要的. 场景:活动在导航栏下面有一个地图,在中心有一个RelativeLayout(红色背景),在Red ...
  • 公司app要求做一个扭蛋功能,其实就是一个可拖动层叠卡片列表,原理还是由一个自定义Recyclerview和LayoutManager来实现 自定义RecyclerView很简单,只是修改touch事件,防止点击到卡片外还被处理的情况 @...
  • 安卓分栏布局,包含2个子View,可通过拖动中间的handle来动态分割两个子View所占空间,支持横向或纵向分栏。 Screenshots Sample APK SplitLayoutSample.apk Features 特性 Orientation : horizontal / ...
  • android UI布局工具

    2013-04-15 15:40:02
    android布局控件拖动 不用手写xml代码 适配
  • Android实现图标拖拽

    2017-07-11 14:02:27
    将项目中用到的图标拖拽整合了,两个均可实现拖拽
  • 继承viewgroup, 编写自定义坐标布局,添加增删时动画操作, 拖动移除效果
  • Eclipse版,如果你导入DemoSmartDragListView报错,那么就自己import并add那个appcompat_v7(如果你的项目目录下有这个工程的话就添加你自己的)就正常了,其实Demo报错并不影响,关键是demo里的jar包才是可拖拽控件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,258
精华内容 12,103
关键字:

安卓拖拽布局