Cambiar la altura del diseño relativo con la misma velocidad que el dedo del usuario Se mueve en el diseño

Soy nuevo en el desarrollo y estoy creando una aplicación en la que tengo un diseño relativo y por debajo de ese diseño relativo un ListView. Ahora el problema es que tengo que cambiar la altura de este diseño relativo (en fondo azul) de 300dp a 140dp dinámicamente cuando el usuario mueve listview cuando este RelativeLayout alcanza su umbral mínimo es decir, 140dp RelativeLayout altura debe detener la reducción y Listview debe moverse en su velocidad normal .

Aquí está la imagen Abajo y Gracias de antemano

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

Introduzca aquí la descripción de la imagen

package com.example.testmovinglayout; import java.util.ArrayList; import java.util.Arrays; import android.app.Activity; import android.graphics.Matrix; import android.graphics.PointF; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; public class MainActivity extends Activity implements View.OnTouchListener { Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); static final int NONE = 0; static final int DRAG = 1; static final int ZOOM = 2; int mode = NONE; private float[] matrixValues = new float[9]; float matrixX = 0; // X coordinate of matrix inside the ImageView float matrixY = 0; // Y coordinate of matrix inside the ImageView float width = 0; // width of drawable float height = 0; // height of drawable private float dx; // postTranslate X distance private float dy; // postTranslate Y distance PointF start = new PointF(); PointF mid = new PointF(); float oldDist = 1f; int height_120dp; int height_230dp; private ListView mainListView; private ArrayAdapter<String> listAdapter; LinearLayout superLL; LinearLayout parent_LLID; RelativeLayout rlTest; TextView _view; // ViewGroup _root; private int _xDelta; private int _yDelta; private int YThreshold; // Create a string for the ImageView label private static final String IMAGEVIEW_TAG = "icon bitmap"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final float scale = getResources().getDisplayMetrics().density; height_120dp = (int) (120 * scale + 0.5f); height_230dp = (int) (230 * scale + 0.5f); rlTest = (RelativeLayout) findViewById(R.id.rlTest); parent_LLID = (LinearLayout) findViewById(R.id.parent_LLID); superLL = (LinearLayout) findViewById(R.id.superLL); // Find the ListView resource. mainListView = (ListView) findViewById(R.id.mainListView); // Create and populate a List of planet names. String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" }; ArrayList<String> planetList = new ArrayList<String>(); planetList.addAll(Arrays.asList(planets)); // Create ArrayAdapter using the planet list. listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, planetList); // Add more planets. If you passed a String[] instead of a List<String> // into the ArrayAdapter constructor, you must not add more items. // Otherwise an exception will occur. listAdapter.add("Ceres"); listAdapter.add("Pluto"); listAdapter.add("Haumea"); listAdapter.add("Makemake"); listAdapter.add("Eris"); // Set the ArrayAdapter as the ListView's adapter. mainListView.setAdapter(listAdapter); // _root = (ViewGroup)findViewById(R.id.root); _view = new TextView(this); _view.setText("TextView!!!!!!!!"); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftMargin = 0; layoutParams.topMargin = 0; layoutParams.bottomMargin = 0; layoutParams.rightMargin = 0; mainListView.setLayoutParams(layoutParams); mainListView.setOnTouchListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onTouch(View v, MotionEvent event) { final int X = (int) event.getRawX(); int Y = (int) event.getRawY(); Log.v("Y is : ", "" + Y); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) superLL .getLayoutParams(); _xDelta = X - lParams.leftMargin; _yDelta = Y - lParams.topMargin; Log.v("event.getX() is : ", "" + event.getX()); Log.v("event.getY() is : ", "" + event.getY()); savedMatrix.set(matrix); start.set(event.getX(), event.getY()); mode = DRAG; Log.v("_yDelta is : ", "" + _yDelta); break; case MotionEvent.ACTION_UP: Log.v("event.getX() is : ", "" + event.getX()); Log.v("event.getY() is : ", "" + event.getY()); savedMatrix.set(matrix); start.set(event.getX(), height_120dp); mode = DRAG; break; case MotionEvent.ACTION_POINTER_DOWN: break; case MotionEvent.ACTION_POINTER_UP: break; case MotionEvent.ACTION_MOVE: LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) superLL .getLayoutParams(); // layoutParams.leftMargin = X - _xDelta; layoutParams.topMargin = Y - _yDelta; // layoutParams.rightMargin = 20; // layoutParams.bottomMargin = -250; superLL.setLayoutParams(layoutParams); break; } parent_LLID.invalidate(); return true; } } ` ` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/parent_LLID" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <LinearLayout android:id="@+id/superLL" android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/rlTest" android:layout_width="match_parent" android:layout_height="230dp" android:background="#aafff7" > </RelativeLayout> <ListView android:id="@+id/mainListView" android:background="#ffffff" android:layout_below="@+id/rlTest" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout> </LinearLayout> 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.