Не могу рисовать на холсте и слушать прикосновения для просмотра одновременно - PullRequest
0 голосов
/ 06 ноября 2019

Моя основная деятельность содержит textView. Он запускает анимацию, если коснуться. На том же экране я могу нарисовать линию (пример) с расширяющимся видом.

OnTouchEvent с холста должен возвращать true, но тогда onTouch из textView никогда не получит его.

Я хочуэтот сенсорный экран работает для обоих. Как я могу это сделать?

MainActivity.java

public class MainActivity extends AppCompatActivity {
    TextView tv,lettres;
    TranslateAnimation animation;
    ConstraintLayout constraintLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        tv.setX(100);
        tv.setY(100);
        constraintLayout = findViewById(R.id.cl);
        lettres = new TextView(this);
        constraintLayout.addView(lettres);
        lettres.setVisibility(View.GONE);
        lettres.setText("test");
        tv.setOnTouchListener(touchListener);
    }

    private View.OnTouchListener touchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (view == tv){

                        lettres.setX(50);
                        lettres.setY(50);
                        animation = new TranslateAnimation(0,10,0,10);
                        lettres[i].startAnimation(animation[i]);
           }
            return false;
        }
    };
}

activity_main.XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/cl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
    <fr.DrawingView
        android:id="@+id/myDrawingView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

DrawingView.java

public class DrawingView extends View {
    Paint myPaint;
    int debutX=0;
    int debutY=0;
    int finX=0;
    int finY=0;

    public DrawingView(Context context, AttributeSet attributeSet) {
        super(context,attributeSet);
        myPaint = new Paint();
        myPaint.setColor(Color.RED);
        myPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        myPaint.setStrokeWidth(20);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawLine(debutX, debutY, finX, finY, myPaint);
        invalidate();
    }
   @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                debutX = (int) event.getX();
                debutY = (int) event.getY();
                finX = (int) event.getX();
                finY = (int) event.getY();
                invalidate();
                break;
            case MotionEvent.ACTION_MOVE:
                finX = (int) event.getX();
                finY = (int) event.getY();
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                invalidate();
                break;
        }
        return true;
    }
}

1 Ответ

1 голос
/ 06 ноября 2019

потому что ваш основной макет использует сенсорное событие. и вы возвращаете true внутри onTouchEvent

...