2014-11-29 3 views
0

Я пробовал много вещей, чтобы справиться с моей проблемой, но на самом деле это не помогло, и google тоже не мог мне помочь. У меня есть ImageView, который содержит холст. Холст рисует часть графика. Поэтому, когда пользователь прокручивает (по горизонтали), холст должен рисовать еще одну часть графика. Например:Анализ и обработка жестов прокрутки в Imageview (с холстом) без ScrollView

Ширина холста 200px

Полотно рисует график от й = 0 до й = 200

пользователя прокручивает (по горизонтали), он перемещает его палец по 100px

холст должен теперь построить график от х = 100 х = 300

холст должен перерисовывать каждый пиксель пользователь прокручивает (для плавной прокрутки) Это решение не работали: Draw КН ole graph и поместите его в Scrollview. Это обеспечивает OutOfMemoryError, потому что холст/растровое изображение слишком велико.

Также мне нужно сделать некоторые другие вещи, поэтому мне нужно сделать это, как описано выше.

Вот код:

XML:

<de.touristenfahrerforum.Marcel.Fragments.SpeedGraph 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:id="@+id/graph" 
    android:background="@android:color/black" 
    android:name="de.touristenfahrerforum.MarcelMoiser.Fragments.SpeedGraph"> 
</de.touristenfahrerforum.Marcel.Fragments.SpeedGraph> 

Java Класс:

public class SpeedGraph extends ImageView 
{ 
... 
public SpeedGraph(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

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

public SpeedGraph(Context context) { 
    super(context); 
} 

public void setup(ArrayList<Location> locations, ScrollViewListener scrollViewListener) 
{ 
... 
    Bitmap bitmap = Bitmap.createBitmap(speedCanvasWidth,speedCanvasHeight,Bitmap.Config.ARGB_8888); 
    canvas  = new Canvas(bitmap); 
    this.setImageBitmap(bitmap); 
...} 
... 
private void drawGraph(int start, int end, int color) 
{ 
    graphPaint.setColor(color); 

    long startTime = locations.get(start).getTime(); 

    Path path = new Path(); 
    path.moveTo((locations.get(start).getTime()-startTime)/10*V.LOGICAL_DENSITY, speedCanvasHeight-(int)(locations.get(start).getSpeed()*3.6*SIZE_FACTOR)); 

    for(int it = start; it < end; it++) 
    { 
     Location location = locations.get(it); 
     path.lineTo((location.getTime()-startTime)/10*V.LOGICAL_DENSITY, speedCanvasHeight-(int)(location.getSpeed()*3.6*SIZE_FACTOR)); 
    } 

    canvas.drawPath(path,graphPaint); 
} 
... 

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

Спасибо, ребята заранее

ответ

0

Это первый раз, когда никто не ответил, но я понял, как решить мою проблему. Лучший способ - реализовать GestureDetector.OnGestureListener и перезаписать все его методы. Также вам нужно создать объект GestureDetector. Метод OnScroll (...) - это то, где искать пиксели, которые пользователь прокрутил. Вот код:

public class SpeedGraph extends ImageView implements GestureDetector.OnGestureListener 
{ 
    private Context context; 
... 
public void setup(...) 
{ 
    this.gestureDetector = new GestureDetector(context, this); 
    gestureDetector.setIsLongpressEnabled(false); 
...} 
@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) 
{ 
    scrolled+=distanceX; 
    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
    drawGrid(); 
    redrawGraphsInCanvas(); 
    this.invalidate(); 
    return true; 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent ev){ 
    gestureDetector.onTouchEvent(ev); 
    return true; 
} 

...

 Смежные вопросы

  • Нет связанных вопросов^_^