android-studioontouchlistener

Resize a view or layout using View.OnTouchListener by sliding or dragging a side in Android Studio


I' making the UI of a scientific calculator and I want to show my scientific buttons by sliding down partially the layout with my buttons. I have found some way to do it but my problem is that I can slide up and down just the bottom side and I need the top side.

default panel possition slide down the pannel and showing the scientific buttons slidding the wrong side

This is the MainActivity:

public class MainActivity extends AppCompatActivity {

LinearLayout llBtns;

private int dpToPx(int dp){ return (int) (dp * getResources().getDisplayMetrics().density);}

private static final int CIRCLE_SIZE_DP = 20;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    llBtns = findViewById(R.id.ll_btns);

    ImageView topAnchor = findViewById(R.id.ivLine);

    topAnchor.setOnTouchListener(
            new AnchorTouchListener(llBtns));
}

This is the Listener:

public class AnchorTouchListener implements View.OnTouchListener {
private int _yDelta;
private View viewToResize;


public AnchorTouchListener(View viewToResize ) {
    this.viewToResize = viewToResize;

}

private int initialHeight;
private int initialY;

@Override
public boolean onTouch(View view, MotionEvent event) {
    final int Y = (int) event.getRawY();

    Log.d("Anchor", "Updating X & Y");

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            // Capture initial conditions of the view to resize.
            initialHeight = viewToResize.getHeight();

            initialY = Y;
            break;

        case MotionEvent.ACTION_UP:
            break;

        case MotionEvent.ACTION_POINTER_DOWN:
            break;

        case MotionEvent.ACTION_POINTER_UP:
            break;

        case MotionEvent.ACTION_MOVE:

            RelativeLayout.LayoutParams lp =
                    (RelativeLayout.LayoutParams) viewToResize.getLayoutParams();
            // Compute how far we have moved in the X/Y directions.
            _yDelta = Y - initialY;
            lp.height = initialHeight + _yDelta;
            viewToResize.setLayoutParams(lp);
            break;
    }
    return true;
}

And this is my XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="13"
tools:context=".MainActivity">

<TextView
    android:id="@+id/tv_input"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:padding="@dimen/tv_input_padding"
    android:layout_weight="2"
    android:gravity="center|end"
    android:text="@string/tv_input_hint"
    android:maxLength="15"
    android:textColor="@color/dark_primary_text"
    android:textSize="@dimen/tv_input_text_size"
    android:background="@color/black"/>
<TextView
    android:id="@+id/tv_output"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:padding="@dimen/tv_input_padding"
    android:layout_weight="1"
    android:gravity="center|end"
    android:text="@string/tv_input_hint"
    android:textColor="@color/dark_secondary_text"
    android:textSize="@dimen/tv_output_text_size"
    android:background="@color/black"/>

<androidx.gridlayout.widget.GridLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    app:useDefaultMargins="false"
    app:alignmentMode="alignBounds"
    app:columnCount="6"
    app:rowCount="1"
    android:background="@color/black">

    <Button
        android:id="@+id/btn_unit_converter"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        style="@style/btn_round_unit_converter"/>

    <Button
        android:id="@+id/btn_currency_converter"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        style="@style/btn_round_currency_converter"/>
    <Button
        android:id="@+id/btn_history"
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        style="@style/btn_round_history"/>

    <Button
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        style="@style/btn_round" />

    <Button
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        style="@style/btn_round" />

    <Button
        app:layout_columnWeight="1"
        app:layout_rowWeight="1"
        style="@style/btn_round" />

</androidx.gridlayout.widget.GridLayout>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="9">
    <androidx.gridlayout.widget.GridLayout
        android:id="@+id/glScientificBtns"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        app:useDefaultMargins="false"
        app:alignmentMode="alignBounds"
        app:columnCount="5"
        app:rowCount="3"
        android:background="@color/dark_primary_color">

        <!-- Row 1 -->

        <Button
            android:id="@+id/btn_inv"
            android:text="@string/btn_inv"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row" />

        <Button
            android:id="@+id/btn_deg_rad"
            android:text="@string/btn_deg_rad"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

        <Button
            android:id="@+id/btn_sin"
            android:text="@string/btn_sin"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row" />

        <Button
            android:id="@+id/btn_cos"
            android:text="@string/btn_cos"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row" />

        <Button
            android:id="@+id/btn_tan"
            android:text="@string/btn_tan"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row" />

        <!--  Row 2 -->

        <Button
            android:id="@+id/btn_plus_minus"
            android:text="@string/btn_plus_minus"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

        <Button
            android:id="@+id/btn_in"
            android:text="@string/btn_In"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row" />

        <Button
            android:id="@+id/btn_log"
            android:text="@string/btn_log"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

        <Button
            android:id="@+id/btn_period"
            android:text="@string/btn_period"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

        <Button
            android:id="@+id/btn_plus_caret"
            android:text="@string/btn_caret"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row" />

        <!--  Row 3 -->

        <Button
            android:id="@+id/btn_pi"
            android:text="@string/btn_pi"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

        <Button
            android:id="@+id/btn_e"
            android:text="@string/btn_e"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

        <Button
            android:id="@+id/btn_left_bracket"
            android:text="@string/btn_left_bracket"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>
        <Button
            android:id="@+id/btn_right_bracket"
            android:text="@string/btn_right_bracket"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

        <Button
            android:id="@+id/btn_square_root"
            android:text="@string/btn_square_root"
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            app:layout_gravity="fill_horizontal"
            style="@style/btn_scientific_row"/>

    </androidx.gridlayout.widget.GridLayout>
    <LinearLayout
        android:id="@+id/ll_btns"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/glScientificBtns"
        android:orientation="vertical"
        android:background="@color/dark_secondary_color">

        <ImageView
            android:id="@+id/ivLine"
            android:layout_width="70dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center|top"
            android:scaleType="centerCrop"
            android:src="@drawable/ic_baseline_remove_dark_24" />

        <androidx.gridlayout.widget.GridLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:columnCount="4"
            app:rowCount="5"
            app:layout_constraintTop_toBottomOf="@+id/imageView3">

            <!-- Row 1 -->

            <Button
                android:id="@+id/btn_c"
                android:text="@string/btn_c"
                style="@style/btn_numbers_row"
                app:layout_column="0"
                app:layout_columnWeight="1"
                app:layout_row="0"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_erase"
                android:text="@string/btn_erase"
                style="@style/btn_numbers_row"
                app:layout_column="1"
                app:layout_columnWeight="1"
                app:layout_row="0"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_percent"
                android:text="@string/btn_percent"
                style="@style/btn_numbers_row"
                app:layout_column="2"
                app:layout_columnWeight="1"
                app:layout_row="0"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_divide"
                android:text="@string/btn_divide"
                android:background="@drawable/btn_number"
                android:textColor="@color/accent_color"
                app:layout_column="3"
                app:layout_columnWeight="1"
                app:layout_row="0"
                app:layout_rowWeight="1"/>

            <!-- Row 2 -->

            <Button
                android:id="@+id/btn_seven"
                android:text="@string/btn_seven"
                style="@style/btn_numbers_row"
                app:layout_column="0"
                app:layout_columnWeight="1"
                app:layout_row="1"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_eight"
                android:text="@string/btn_eight"
                style="@style/btn_numbers_row"
                app:layout_column="1"
                app:layout_columnWeight="1"
                app:layout_row="1"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_nine"
                android:text="@string/btn_nine"
                style="@style/btn_numbers_row"
                app:layout_column="2"
                app:layout_columnWeight="1"
                app:layout_row="1"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_multiply"
                android:text="@string/btn_multiply"
                android:background="@drawable/btn_number"
                android:textColor="@color/accent_color"
                android:textAllCaps="false"
                app:layout_column="3"
                app:layout_columnWeight="1"
                app:layout_row="1"
                app:layout_rowWeight="1"/>

            <!-- Row 3 -->

            <Button
                android:id="@+id/btn_four"
                android:text="@string/btn_four"
                style="@style/btn_numbers_row"
                app:layout_column="0"
                app:layout_columnWeight="1"
                app:layout_row="2"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_five"
                android:text="@string/btn_five"
                style="@style/btn_numbers_row"
                app:layout_column="1"
                app:layout_columnWeight="1"
                app:layout_row="2"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_six"
                android:text="@string/btn_six"
                style="@style/btn_numbers_row"
                app:layout_column="2"
                app:layout_columnWeight="1"
                app:layout_row="2"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_minus"
                android:text="@string/btn_minus"
                android:background="@drawable/btn_number"
                android:textColor="@color/accent_color"
                app:layout_column="3"
                app:layout_columnWeight="1"
                app:layout_row="2"
                app:layout_rowWeight="1"/>

            <!-- Row 4 -->

            <Button
                android:id="@+id/btn_one"
                android:text="@string/btn_one"
                style="@style/btn_numbers_row"
                app:layout_column="0"
                app:layout_columnWeight="1"
                app:layout_row="3"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_two"
                android:text="@string/btn_two"
                style="@style/btn_numbers_row"
                app:layout_column="1"
                app:layout_columnWeight="1"
                app:layout_row="3"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_three"
                android:text="@string/btn_three"
                style="@style/btn_numbers_row"
                app:layout_column="2"
                app:layout_columnWeight="1"
                app:layout_row="3"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_plus"
                android:text="@string/btn_plus"
                android:background="@drawable/btn_number"
                android:textColor="@color/accent_color"
                app:layout_column="3"
                app:layout_columnWeight="1"
                app:layout_row="3"
                app:layout_rowWeight="1"/>

            <!-- Row 5 -->

            <Button
                android:id="@+id/btn_zero"
                android:text="@string/btn_zero"
                style="@style/btn_numbers_row"
                app:layout_column="0"
                app:layout_columnWeight="1"
                app:layout_row="4"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_dot"
                android:text="@string/btn_dot"
                style="@style/btn_numbers_row"
                app:layout_column="1"
                app:layout_columnWeight="1"
                app:layout_row="4"
                app:layout_rowWeight="1"/>

            <Button
                style="@style/btn_numbers_row"
                android:clickable="false"
                app:layout_column="2"
                app:layout_columnWeight="1"
                app:layout_row="4"
                app:layout_rowWeight="1"/>

            <Button
                android:id="@+id/btn_equals"
                android:text="@string/btn_equals"
                style="@style/btn_numbers_row_orange"
                app:layout_column="3"
                app:layout_columnWeight="1"
                app:layout_row="4"
                app:layout_rowWeight="1"/>

        </androidx.gridlayout.widget.GridLayout>
    </LinearLayout>
</RelativeLayout></LinearLayout>

Thanks in advance.


Solution

  • Try constraining your llBtns Linear Layout to the bottom of the parent