在LinearLayout中更改View的位置

时间:2014-02-27 11:53:35

标签: android

我正在使用以下布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/lnrLayout_cVideo_LB"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/relative_cVideo_LB"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight=".15" >

        <VideoView
            android:id="@+id/cVideo_LB"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:tag="2" />
       </RelativeLayout>

        <TextView
            android:id="@+id/txtVw_cVideo_LB"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight=".85"
            android:background="#FFFFFF"
            android:gravity="center"
            android:text=""/>

 </LinearLayout>

因此,当我点击VideoView的{​​{1}}位置时,如果我再次点击,则会转到TextView的顶部,我应该恢复。

为此,我使用以下代码,

VideoView

但它没有改变它的立场。我探索了解决方案,我发现我可以通过video.setOnTouchListener(new OnTouchListener() { @Override public void onTouch(View v) { // TODO Auto-generated method stub if(flag_video==0) { textview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT,(float).85); relative_LB.setLayoutParams(new LayoutParams(android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,(float).15); flag_video=1; v.invalidate(); } else { relative_LB.setLayoutParams(new LayoutParams(android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,(float).15)); lb.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT,(float).85)); flag_video=0; v.invalidate(); } } }); View.removeView()方法来实现。但是出于我的应用目的,我无法使用这些方法。所以有人建议我换个方法吗?

请不要建议我View.removeView()和view.addView()方法

2 个答案:

答案 0 :(得分:0)

您可以设置RelativeLayoutGONE的可见性,它应该消失,textview会上升,就像下面的方法一样(当flag_video == 0 textview上去时):< / p>

video.setOnTouchListener(new OnTouchListener() {

    @Override
    public void onTouch(View v) {
        // TODO Auto-generated method stub
        if(flag_video==0)
        {
            //textview should go upside
            relative_LB.setVisibility(RelativeLayout.GONE);
            flag_video=1;
        }
        else
        {
            relative_LB.setVisibility(RelativeLayout.VISIBLE);
            flag_video=0;
        }
    }
});

希望它有所帮助!

答案 1 :(得分:0)

你有两个问题:

  1. 您使用onTouch(View v)方法而不是onTouch(View v, MotionEvent event)方法。 onTouch()方法应该有两个参数。 2. onTouch()的退货类型应为boolean类型,但您使用的是void

  2. 另一个问题是,您将LayoutParams设置为lb而不是textview条件下的else

  3. 现在,将以下的侦听器代码段替换为您的...我认为,您将做对。

        video.setOnTouchListener(new OnTouchListener() {
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if (flag_video == 0) {
                    textview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                            LayoutParams.MATCH_PARENT, (float) .85));
                    relative_LB.setLayoutParams(new LayoutParams(
                            android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,
                            android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, (float) .15));
                    flag_video = 1;
                    v.invalidate();
                } else {
                    relative_LB.setLayoutParams(new LayoutParams(
                            android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,
                            android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, (float) .85));
                    textview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                            LayoutParams.MATCH_PARENT, (float) .15));
    
                    flag_video = 0;
                    v.invalidate();
                }
                return true;
            }
    
        });