拖放线性布局的子视图 [英] Drag and drop for linearlayout's child views

查看:25
本文介绍了拖放线性布局的子视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的布局有 5 个不同的子视图,子视图是相对布局,其中包含多个子视图,而且它们也各不相同.因此我使用滚动视图作为这样的根容器:

I have layout with 5 different child views, Child views are relativelayout with number of child views inside it, and all are different too. Hence i am using scrollview as root container like this:

<ScrollView android:layout_width="match_parent" android:layout_height="match_parent"
        android:fillViewport="true" android:scrollbars="none">

        <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
            android:id="@+id/home_page_scrollview_outer_layout">
         <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            android:layout_alignParentLeft="true"
            android:background="@drawable/homescreen_yellow" >



            <ImageButton android:id="@+id/hp_imgbtn_listA" android:layout_width="wrap_content" android:layout_height="wrap_content"
                 android:layout_alignParentRight="true" android:src="@drawable/arrow_right">
            </ImageButton>    

            <ListView
                android:id="@+id/listA"
                android:layout_below="@id/hp_txt_listA"
                android:background="@color/home_page_bg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
            </ListView>
     </RelativeLayout>

    <!-- List B layout -->    

        <RelativeLayout     
            android:layout_weight="1"
            android:layout_marginRight="10dip"
            android:background="@drawable/homescreen_cyan"
            android:layout_width="match_parent" 
            android:layout_height="wrap_content">


        </RelativeLayout>

     <!-- List C layout -->   

        <RelativeLayout     
            android:layout_weight="1"
            android:layout_marginRight="10dip"
            android:background="@drawable/homescreen_purple"
            android:layout_width="match_parent" 
            android:layout_height="wrap_content">

    </RelativeLayout>  

     <!-- List D layout -->   

        <RelativeLayout 
            android:layout_weight="1"   
            android:layout_marginRight="10dip"
            android:background="@drawable/homescreen_turqoise"
            android:layout_width="match_parent" 
            android:layout_height="wrap_content">

    </RelativeLayout> 

     <!-- List E layout -->   

        <RelativeLayout 
            android:layout_weight="1"   
            android:layout_marginRight="10dip"
            android:background="@drawable/homescreen_turqoise"
            android:layout_width="match_parent" 
            android:layout_height="wrap_content">

    </RelativeLayout> 
    <LinearLayout>
</ScrollView>   

我想要有拖拽效果的LinearLayout容器.知道如何实现LinearLayout容器的拖拽吗?我有 ListView 的工作示例,我想滚动视图也应该是一样的,但滚动视图中只能包含一个子视图.

I want to have drag and drop effect LinearLayout container. Any idea how to achieve Drag and Drop for LinearLayout container? I got working example for ListView, I guess for scrollview it should be same too, but scrollview can contain only one child view inside it.

推荐答案

将此添加到您的 onCreate 中:

Add this to your onCreate:

 yourView.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            drag(event, v);
            return false;
        }
    });

这在任何方法之外都适用于您的活动类.

And this to your Activity Class outside any methods.

       public void drag(MotionEvent event, View v)
        {

            RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams();

            switch(event.getAction())
            {
               case MotionEvent.ACTION_MOVE:
               {
                 params.topMargin = (int)event.getRawY() - (v.getHeight());
                 params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
                 v.setLayoutParams(params);
                 break;
               }
               case MotionEvent.ACTION_UP:
               {
                 params.topMargin = (int)event.getRawY() - (v.getHeight());
                 params.leftMargin = (int)event.getRawX() - (v.getWidth()/2);
                 v.setLayoutParams(params);
                 break;
               }
               case MotionEvent.ACTION_DOWN:
               {
                v.setLayoutParams(params);
                break;
               }
            }

这篇关于拖放线性布局的子视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆