Hallo
ich versuche mich heute zum erstem mal an sonem Graphics Zeugs und hänge mich grade an dem Problem auf, dass ich ein erstelltes Canvas nicht Scrollen und somit nicht auf den gesamten Inhalt zugreifen kann .
Ich wollt das eigentlich so toll haben wie bei Öffi die verbindungsübersicht ...
nach intensiver Internetrecherche stell ich mein Problem mal selber dar.
Ich habs hinbekommen, dass ich jetzt tatsächlich sowas wie Scrollen kann .. allerdings funktioniert es nicht wies soll(hüpft komisch hin und her) und reagiert natürlich auch erst dann wenn der Finger schon wieder vom DIsplay weg ist.
Ich habs anstatt mit scrollTo auch schon mit ScrollBy versucht aber da gings nur nach unten und nicht nach oben.
Bei der Methode getHistoricalY() muss ich ein bis zwei Werte mitgeben aber ich weis nicht genau was er da erwartet damits richtig funktioniert (Doku war nicht sehr aufschlussreich fand ich) deswegen hab ich meinen ersten versuch über me.getAction() == me.ACTION_MOVE auch erstmal verworfen.
Ich hoffe ihr konnten meiner Erklärung zum Problem folgen und mir irgendwie weiterhelfen
Hier die View:
public class TimeTable extends Activity {
private int semester;
private int day;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
semester = getIntent().getExtras().getInt("semester");
day = getIntent().getExtras().getInt("day");
setContentView(new TimeTableView(this));
}
private class TimeTableView extends View implements OnTouchListener {
// DIMENSIONS
private final int BORDER = 10;
private final int PADDINGX = 100;
private final int DEFAULT_PAUSE = 15;
private final int MITTAGS_PAUSE = 60;
private final int DEFAULT_MULTI = 150;
private final int TEXT_SIZE = 20;
private int width;
// PAINT UTILS
private Canvas canvas;
private Paint paint;
// TEST
private float newY;
private float oldY;
public TimeTableView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.canvas = canvas;
this.paint = new Paint();
width = getWidth();
paint.setStyle(Style.FILL_AND_STROKE);
paint.setAntiAlias(true);
drawTimeTable();
}
private void drawTimeTable() {
int aktY = BORDER;
String[] times = {"8:15", "9:45", "10:00", "11:30", "11:45", "13:15", "14:15", "15:45", "16:00", "17:30", "17:45", "19:15", "19:30"};
float[] dots = {2, 2};
Paint linepaint = new Paint();
paint.setColor(Color.GRAY);
linepaint.setColor(Color.DKGRAY);
linepaint.setPathEffect(new DashPathEffect(dots, 2));
paint.setTextSize(TEXT_SIZE);
for (int i = 0; i < times.length; i++) {
canvas.drawLine(0, aktY, width, aktY, linepaint);
if (i % 2 == 1) {
canvas.drawText(times[i], 0, aktY-7, paint);
if (times[i] == "13:15") {
aktY += MITTAGS_PAUSE;
paint.setTextSize(35);
canvas.drawText("Mittagspause", PADDINGX, aktY-20, paint);
paint.setTextSize(TEXT_SIZE);
} else
aktY += DEFAULT_PAUSE;
} else {
canvas.drawText(times[i], 0, aktY+TEXT_SIZE+2, paint);
aktY += DEFAULT_MULTI;
}
}
}
@Override
public boolean onTouch(View view, MotionEvent me) {
if (me.getAction() == me.ACTION_DOWN) {
oldY = me.getY();
} else if (me.getAction() == me.ACTION_UP) {
newY = me.getY();
float diff = 0;
if (newY < oldY) {
diff = oldY + newY;
} else {
diff = newY - oldY;
}
scrollTo(0, (int)diff);
}
invalidate();
return true;
}
}
}
Alles anzeigen
Herzlichen Dank schonmal