Android拖放– DragLinearLayout
时间:2020-02-23 14:28:53 来源:igfitidea点击:
今天,我们将学习如何使用DragLinearLayout创建android拖放功能。
使用DragLinearLayout的Android拖放
可以使用Android DragLinearLayout库代替任何LinearLayout。
为此,我们将在build.gradle文件中添加第三方库,如下所示:
compile 'com.jmedeisis:draglinearlayout:1.1.0'
上面的类库扩展了LinearLayout,自定义项是添加拖放功能。
重写onTouchEvent方法可通过编程方式检测手势运动并相应地拖放。
我们将在以后的教程中详细介绍android拖放功能。
注意:同步Gradle后,您可以在库文件夹中查看DragLinearLayout布局的完整源代码。
默认情况下,LinearLayout中的子视图不可拖动。
为此,我们将为每个ChildView调用方法setViewDraggable(View,View)。
Android拖放示例项目结构
这个android拖放项目由一个活动及其布局以及在布局中使用的可绘制图像组成。
在本教程中,我们在" styles.xml"下添加了UI小部件的属性。
Android拖放代码
下面给出了" activity_main.xml"代码:
<com.jmedeisis.draglinearlayout.DragLinearLayout xmlns:android="https://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Please Drag and Drop Me Somewhere" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/TextViewStyle" <TextView android:background="@android:color/holo_red_light" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/TextViewStyle" <TextView android:text="This tutorial uses a third party library to drag LinearLayouts" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/TextViewStyle" <ImageView android:layout_width="match_parent" android:layout_height="120dp" android:scaleType="centerCrop" android:src="@drawable/img_1" <TextView android:text="Ever thought how dragging songs in an application playlist works!" android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/TextViewStyle" </com.jmedeisis.draglinearlayout.DragLinearLayout>
上面的布局由多个TextView和一个ImageView组成。
这些是可拖动布局的ChildViews。
MainActivity.java如下所示:
package com.theitroad.draggablelinearlayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.jmedeisis.draglinearlayout.DragLinearLayout; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DragLinearLayout dragLinearLayout = (DragLinearLayout) findViewById(R.id.container); //set all children draggable except the first (the header) for(int i = 0; i < dragLinearLayout.getChildCount(); i++){ View child = dragLinearLayout.getChildAt(i); dragLinearLayout.setViewDraggable(child, child); //the child is its own drag handle } } }
在上面的代码中,我们已将每个ChildView明确设置为可拖动的一个。
第三方库中提供的DraggableLinearLayout类包含拖放实现。
注意:该库的局限性在于它只能支持LinearLayout的垂直方向。