Простой вид рисования одним касанием, но продолжайте получать отмену действия до завершения касаний



Это было сводит меня с ума.



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

Я использую Samsung G SII 2.3.3, но строю до 2.1



Идеи Муравьев?



Мой пример кода:



  package com.mycompany.myviews;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class CustomView extends View
{
private ArrayList<DrawPoint> points = new ArrayList<DrawPoint>();

public CustomView(Context context, AttributeSet attrs)
{
super(context, attrs);
}

public void addPoint(DrawPoint p)
{
points.add(p);
}

public boolean onTouchEvent (MotionEvent event)
{
DrawPoint p = new DrawPoint((int)event.getX(), (int)event.getY());

switch(event.getAction())
{
case android.view.MotionEvent.ACTION_DOWN:
p.start = true;
break;

case android.view.MotionEvent.ACTION_CANCEL:
Log.d("TouchView", "On Touch cancelled.");
break;
}

addPoint(p);
invalidate();

return true;
}

public void onDraw(Canvas c)
{
super.onDraw(c);

Path path = new Path();

for (int i = 0; i < points.size(); i++)
{
DrawPoint currentPoint = points.get(i);
if (currentPoint.start == true)
path.moveTo(currentPoint.p.x, currentPoint.p.y);
else
path.lineTo(currentPoint.p.x, currentPoint.p.y);
}

Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(2);
paint.setColor(Color.BLACK);
c.drawPath(path, paint);
}

private class DrawPoint
{
public boolean start = false;
public Point p;

DrawPoint(int x, int y)
{
p = new Point(x, y);
}
}
}


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



Решение, которое я нашел, чтобы быть достаточно хорошим для моих нужд, чтобы добавить следующую строку в случае ACTION_DOWN:



getParent().requestDisallowInterceptTouchEvent(true);


Это затем позволяет моему взгляду получить все прикосновения.

559   2  

2 ответов:

Я отредактировал свой ответ...

Я нашел пример рисования пальцами в образцах Android, а также обсуждение этого примера на stackoverflow. Надеюсь, это вам поможет.

Http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.html

Android FingerPaint пример использования Canvas, что такое закадровый холст?

Мой первоначальный пост...

У меня нет решения, но было найдите сайт, который может дать вам некоторые идеи о том, что вы могли бы сделать...

Http://bestsiteinthemultiverse.com/2008/11/android-graphics-example/

Решение, которое я нашел, чтобы быть достаточно хорошим для моих нужд, чтобы добавить следующую строку в случае ACTION_DOWN:

getParent().requestDisallowInterceptTouchEvent(true);

Это затем позволяет моему взгляду получить все прикосновения.

Comments

    Ничего не найдено.