I am new to development and I am creating an application in which I have one relative layout and below the relative layout of one ListView. Now the problem is that I have to change the height of this relative layout (in blue background) from 300dp to 140dp dynamically when the user moves the list when this RelativeLayout reaches its threshold value min, i.e. 140dp RelativeLayout Height should stop the decrease, and the Listview should move at its normal speed.
Here is the image below and thanks in Advance



`
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;
float matrixY = 0;
float width = 0;
float height = 0;
private float dx;
private float dy;
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;
private int _xDelta;
private int _yDelta;
private int YThreshold;
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);
mainListView = (ListView) findViewById(R.id.mainListView);
String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars",
"Jupiter", "Saturn", "Uranus", "Neptune" };
ArrayList<String> planetList = new ArrayList<String>();
planetList.addAll(Arrays.asList(planets));
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow,
planetList);
listAdapter.add("Ceres");
listAdapter.add("Pluto");
listAdapter.add("Haumea");
listAdapter.add("Makemake");
listAdapter.add("Eris");
mainListView.setAdapter(listAdapter);
_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) {
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.topMargin = Y - _yDelta;
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>
`