Search code examples
androidscrollviewandroid-scrollview

I want to Scrollview be fixed by touching buttons?


I want to Scrollview be fixed by touching buttons?

I want to change Scrollview by touching its bar and disable move it by touching buttons, Edit Text and so on in it. I want to create a piano app and I want to move buttons by scrollview to access all keys. please help if you have an idea.

I want to change Scrollview by touching its bar and disable move it by touching buttons, Edit Text and so on in it. I want to create a piano app and I want to move buttons by scrollview to access all keys. please help if you have an idea.

real piano

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scrollView_addNewBill"
    tools:context="MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:descendantFocusability="beforeDescendants"
        android:focusable="true"
        android:focusableInTouchMode="false"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:layout_height="match_parent">
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:text="1"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:text="2"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:text="3"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:text="4"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
       
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>
        <Button
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:gravity="center"/>

    </LinearLayout>
</ScrollView>


Solution

  • You need to Intercept ScrollView Touch Events.

    Use mScrollView.requestDisallowInterceptTouchEvent(true); to disallow touch event of scrollview

    In your case

    buttomRecord.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            startRecording();
            mScrollView.requestDisallowInterceptTouchEvent(true);
            return true;
        }
        else if(event.getAction() == MotionEvent.ACTION_UP){
            stopRecording();
            mScrollView.requestDisallowInterceptTouchEvent(false);
            return true;
        }
        return false;
    }
    });
    

    By doing this, if user is clicking button then scrollview will not scroll.

    Implement this for all of your views. Or it will be lengthy to set it for all buttons. For that you can implement onTouchListener for Button's parent LinearLayout.