Отключить прокрутку, когда используется холст - PullRequest
0 голосов
/ 19 мая 2018

Я создаю приложение, которое позволяет пользователю добавлять подпись, рисуя ее на холсте.Из моего предыдущего исследования я решил использовать библиотеку, обнаруженную на Github, которая называется SignatureView .

Представление подписи работает нормально до тех пор, пока не будет включена прокрутка, на этом этапе прокруткавсе еще имеет место, когда пользователь рисует, то есть холст перемещается во время ввода.

В связи с этим я хотел бы отключить прокрутку, когда пользователь взаимодействует с представлением подписи.До сих пор я пытался поместить представление во вложенное представление прокрутки и несколько атрибутов xml, но ни один из них, похоже, не имеет никакого эффекта.

Файл XML макета (с опущенными несоответствующими представлениями)

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fitsSystemWindows="true"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.jordan.promise.fragments.EnterSignature"
    android:configChanges="orientation|screenSize"
    android:name=".MainActivity"
    android:label="@string/app_name">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingTop="56dp"
    android:paddingLeft="24dp"
    android:paddingRight="24dp">

    <com.kyanogen.signatureview.SignatureView
        xmlns:sign="http://schemas.android.com/apk/res-auto"
        android:id="@+id/signature_view"
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:layout_weight="1"
        sign:penSize="5dp"
        sign:backgroundColor="#ffffff"
        sign:penColor="#000000"
        sign:enableSignature="true"/>
</ScrollView>

Методы OnCreate и OnCreateView (представление подписи в настоящее время больше нигде не используется)

   @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString(ARG_PARAM1);
        mParam2 = getArguments().getString(ARG_PARAM2);
    }

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_enter_signature, container, false);

    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    String defaultValue = getResources().getString(R.string.error_name);
    String firstName = sharedPref.getString(getString(R.string.user_first), defaultValue);

    //Greet User and provide instructionsView for entering signature
    helloFirst = view.findViewById(R.id.hello_first);
    instructionsView = view.findViewById(R.id.sig_instructions);
    String hello = getResources().getString(R.string.hello);
    String instructions = getResources().getString(R.string.enter_signature_instruction);
    helloFirst.setText(String.format("%s %s!", hello, firstName)); //Title/Welcome text
    instructionsView.setText(instructions);
    sigBtn = view.findViewById(R.id.signatureBtn);//Continue button, changes text if signature is present

    isDirty = false; //Solves API bug were isDirty only detects if a gesture is taking place

//Signature Capture
clearSignature = view.findViewById(R.id.clearBtn);
clearSignature.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        signatureView.clearCanvas();
        isDirty = false;
    }
});

//Check That Signature Field is not Empty
thread = new Thread() {
    @Override
    public void run() {
        try {
            while(true) {
                sleep(1000);
                Log.i("handler" , "running");
                if(signatureView.isDirty() || isDirty) {
                    sigBtn.setText(getResources().getString(R.string.accept_sig));
                    isDirty = true;
                }
                else {
                    sigBtn.setText(getResources().getString(R.string.decline_sig));
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};

thread.start();

setHasOptionsMenu(true);

signatureView = view.findViewById(R.id.signature_view);


return view;
}

Заранее благодарю за любую помощь.Я надеюсь, что это имеет смысл, но, пожалуйста, дайте мне знать, если вам нужны какие-либо разъяснения или дополнительная информация.

1 Ответ

0 голосов
/ 07 декабря 2018

На случай, если кто-нибудь наткнется на это.Мое решение состояло в том, чтобы создать отдельный макет для ландшафта, затем я разместил и установил размеры элементов так, чтобы прокрутка не была проблемой.

...