max theis
- Forum-Beiträge: 31
13.09.2010, 13:36:50 via Website
13.09.2010 13:36:50 via Website
Hallo Leute,
ich bin es mal wieder. Heute stehe ich programmiertechnisch schon das ein oder andere mal auf dem Schlauch. Im moment habe ich folgendes Problem.
Ich zeichne in meinem Programm eine Linie, diese Linie möchte ich "wenn sie mir gefällt" speichern bzw. oder halt neu machen. Ich möchte das Speichern anhand einer Alertbox machen. Nur wenn ich eine Alertbox erstelle möchten geht das nicht, ist ja auch an sich logisch. Muss ich eine Onlick Methode schreiben in dem ich den Wert übergebe um ihn da zu verarbeiten.
Es tut mir leid, das ich mein Problem nicht so gut erklären konnte. Aber ich hoffe das es jetzt Verständlich ist, was ich meine.
Mein Code
Gruß
max
ich bin es mal wieder. Heute stehe ich programmiertechnisch schon das ein oder andere mal auf dem Schlauch. Im moment habe ich folgendes Problem.
Ich zeichne in meinem Programm eine Linie, diese Linie möchte ich "wenn sie mir gefällt" speichern bzw. oder halt neu machen. Ich möchte das Speichern anhand einer Alertbox machen. Nur wenn ich eine Alertbox erstelle möchten geht das nicht, ist ja auch an sich logisch. Muss ich eine Onlick Methode schreiben in dem ich den Wert übergebe um ihn da zu verarbeiten.
Es tut mir leid, das ich mein Problem nicht so gut erklären konnte. Aber ich hoffe das es jetzt Verständlich ist, was ich meine.
Mein Code
1package com.test.motionpath;
2
3import java.util.ArrayList;
4
5import android.app.AlertDialog;
6import android.content.Context;
7import android.content.DialogInterface;
8import android.graphics.Bitmap;
9import android.graphics.Canvas;
10import android.graphics.Color;
11import android.graphics.Paint;
12import android.graphics.PointF;
13import android.util.Log;
14import android.view.MotionEvent;
15import android.view.SurfaceHolder;
16import android.view.SurfaceView;
17import android.view.View;
18import android.view.View.OnTouchListener;
19
20public class MotionPathView extends SurfaceView implements SurfaceHolder.Callback, OnTouchListener
21{
22
23 private Bitmap line;
24 private Canvas lineCanvas;
25 private DrawThread thread;
26 private Paint paint;
27 private Paint linepaint;
28 private Paint verticalPaint;
29 private ArrayList<PointF> points;
30 private PointF last;
31 private int idx;
32 private float incline;
33 private float inclineVertical;
34 private AlertDialog show;
35
36
37 public void SavePoint(){
38
39 return;
40 }
41
42 public MotionPathView(Context context)
43 {
44 super(context);
45
46 setFocusable(true);
47 setClickable(true);
48 setOnTouchListener(this);
49
50 getHolder().addCallback(this);
51 thread = new DrawThread(getHolder(), this);
52
53 points = new ArrayList<PointF>();
54
55 paint = new Paint();
56 paint.setStrokeWidth(2);
57 paint.setAntiAlias(false);
58 paint.setColor(Color.GREEN);
59
60 linepaint = new Paint();
61 linepaint.setStrokeWidth(15);
62 linepaint.setAntiAlias(true);
63 linepaint.setColor(Color.BLUE);
64
65
66 verticalPaint = new Paint();
67 verticalPaint.setStrokeWidth(3);
68 verticalPaint.setAntiAlias(true);
69 verticalPaint.setColor(Color.RED);
70
71 idx = -1;
72 }
73
74 @Override
75 protected void onDraw(Canvas canvas)
76 {
77 canvas.drawColor(Color.BLACK);
78
79 if (line != null)
80 canvas.drawBitmap(line, 0, 0, null);
81
82 if (idx > -1 && idx < points.size())
83 {
84 if (idx < points.size() - 1)
85 {
86 if (points.get(idx + 1).x - points.get(idx).x != 0)
87 incline = (points.get(idx + 1).y - points.get(idx).y) / (points.get(idx + 1).x - points.get(idx).x);
88 else
89 incline = 0;
90
91 if (points.get(idx + 1).y - points.get(idx).y == 0)
92 {
93 canvas.drawLine(points.get(idx).x, points.get(idx).y, points.get(idx).x, points.get(idx).y + 10, verticalPaint);
94 canvas.drawLine(points.get(idx).x, points.get(idx).y, points.get(idx).x, points.get(idx).y - 10, verticalPaint);
95 idx++;
96 return;
97 }
98 }
99
100
101
102 inclineVertical = incline == 0 ? incline : -1 / incline;
103
104
105
106 float x = points.get(idx).x + 10;
107 float y = inclineVertical * (x - points.get(idx).x) + points.get(idx).y;
108 canvas.drawLine(points.get(idx).x, points.get(idx).y, x, y, verticalPaint);
109
110 x = points.get(idx).x - 10;
111 y = inclineVertical * (x - points.get(idx).x) + points.get(idx).y;
112 canvas.drawLine(points.get(idx).x, points.get(idx).y, x, y, verticalPaint);
113 idx++;
114 }
115 }
116
117 @Override
118 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
119 {
120
121 }
122
123 @Override
124 public void surfaceCreated(SurfaceHolder holder)
125 {
126 thread.setRunning(true);
127 thread.start();
128
129 line = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.RGB_565);
130 lineCanvas = new Canvas(line);
131 lineCanvas.drawColor(Color.BLACK);
132 }
133
134 @Override
135 public void surfaceDestroyed(SurfaceHolder holder)
136 {
137 boolean retry = true;
138 thread.setRunning(false);
139 while (retry)
140 {
141 try
142 {
143 thread.join();
144 retry = false;
145 } catch (InterruptedException ignore)
146 {
147
148 }
149 }
150
151 }
152
153 @Override
154 public boolean onTouch(View v, MotionEvent event)
155 {
156 switch (event.getAction())
157 {
158 case MotionEvent.ACTION_DOWN:
159 idx = -1;
160 points.clear();
161 lineCanvas.drawColor(Color.BLACK);
162 last = null;
163
164
165 case MotionEvent.ACTION_MOVE:
166 if (last == null)
167 {
168 last = new PointF();
169 //lineCanvas.drawLine((int) event.getX(), (int) event.getY(), (int) event.getX(), (int) event.getY(), paint);
170 lineCanvas.drawPoint(event.getX(), event.getY(), paint);
171
172
173
174
175 } else
176 {
177 lineCanvas.drawLine(last.x, last.y, (int) event.getX(), (int) event.getY(), linepaint);
178
179 // Zeichnung
180 }
181
182 points.add(new PointF( event.getX(), event.getY()));
183 last.set(event.getX(), event.getY());
184
185
186 OnClick(points);
187
188 //Log.v("","Punkte" + points);
189
190
191
192
193 //SavePoints(points);
194
195
196 break;
197
198
199 case MotionEvent.ACTION_UP:
200 idx = 0;
201 break;
202
203 default:
204 break;
205 }
206
207 return true;
208 }
209
210
211 private void OnClick(ArrayList<PointF> points) {
212
213 // new AlertDialog.Builder(this).setMessage(R.string.app_name);
214 // TODO Auto-generated method stub
215
216
217 }
218
219 private void SavePoints(ArrayList<PointF> points) {
220 ArrayList<PointF> x = points; // Arraylist von Punkten die gespeichert werden sollen
221 }
222
223}
2
3import java.util.ArrayList;
4
5import android.app.AlertDialog;
6import android.content.Context;
7import android.content.DialogInterface;
8import android.graphics.Bitmap;
9import android.graphics.Canvas;
10import android.graphics.Color;
11import android.graphics.Paint;
12import android.graphics.PointF;
13import android.util.Log;
14import android.view.MotionEvent;
15import android.view.SurfaceHolder;
16import android.view.SurfaceView;
17import android.view.View;
18import android.view.View.OnTouchListener;
19
20public class MotionPathView extends SurfaceView implements SurfaceHolder.Callback, OnTouchListener
21{
22
23 private Bitmap line;
24 private Canvas lineCanvas;
25 private DrawThread thread;
26 private Paint paint;
27 private Paint linepaint;
28 private Paint verticalPaint;
29 private ArrayList<PointF> points;
30 private PointF last;
31 private int idx;
32 private float incline;
33 private float inclineVertical;
34 private AlertDialog show;
35
36
37 public void SavePoint(){
38
39 return;
40 }
41
42 public MotionPathView(Context context)
43 {
44 super(context);
45
46 setFocusable(true);
47 setClickable(true);
48 setOnTouchListener(this);
49
50 getHolder().addCallback(this);
51 thread = new DrawThread(getHolder(), this);
52
53 points = new ArrayList<PointF>();
54
55 paint = new Paint();
56 paint.setStrokeWidth(2);
57 paint.setAntiAlias(false);
58 paint.setColor(Color.GREEN);
59
60 linepaint = new Paint();
61 linepaint.setStrokeWidth(15);
62 linepaint.setAntiAlias(true);
63 linepaint.setColor(Color.BLUE);
64
65
66 verticalPaint = new Paint();
67 verticalPaint.setStrokeWidth(3);
68 verticalPaint.setAntiAlias(true);
69 verticalPaint.setColor(Color.RED);
70
71 idx = -1;
72 }
73
74 @Override
75 protected void onDraw(Canvas canvas)
76 {
77 canvas.drawColor(Color.BLACK);
78
79 if (line != null)
80 canvas.drawBitmap(line, 0, 0, null);
81
82 if (idx > -1 && idx < points.size())
83 {
84 if (idx < points.size() - 1)
85 {
86 if (points.get(idx + 1).x - points.get(idx).x != 0)
87 incline = (points.get(idx + 1).y - points.get(idx).y) / (points.get(idx + 1).x - points.get(idx).x);
88 else
89 incline = 0;
90
91 if (points.get(idx + 1).y - points.get(idx).y == 0)
92 {
93 canvas.drawLine(points.get(idx).x, points.get(idx).y, points.get(idx).x, points.get(idx).y + 10, verticalPaint);
94 canvas.drawLine(points.get(idx).x, points.get(idx).y, points.get(idx).x, points.get(idx).y - 10, verticalPaint);
95 idx++;
96 return;
97 }
98 }
99
100
101
102 inclineVertical = incline == 0 ? incline : -1 / incline;
103
104
105
106 float x = points.get(idx).x + 10;
107 float y = inclineVertical * (x - points.get(idx).x) + points.get(idx).y;
108 canvas.drawLine(points.get(idx).x, points.get(idx).y, x, y, verticalPaint);
109
110 x = points.get(idx).x - 10;
111 y = inclineVertical * (x - points.get(idx).x) + points.get(idx).y;
112 canvas.drawLine(points.get(idx).x, points.get(idx).y, x, y, verticalPaint);
113 idx++;
114 }
115 }
116
117 @Override
118 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
119 {
120
121 }
122
123 @Override
124 public void surfaceCreated(SurfaceHolder holder)
125 {
126 thread.setRunning(true);
127 thread.start();
128
129 line = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.RGB_565);
130 lineCanvas = new Canvas(line);
131 lineCanvas.drawColor(Color.BLACK);
132 }
133
134 @Override
135 public void surfaceDestroyed(SurfaceHolder holder)
136 {
137 boolean retry = true;
138 thread.setRunning(false);
139 while (retry)
140 {
141 try
142 {
143 thread.join();
144 retry = false;
145 } catch (InterruptedException ignore)
146 {
147
148 }
149 }
150
151 }
152
153 @Override
154 public boolean onTouch(View v, MotionEvent event)
155 {
156 switch (event.getAction())
157 {
158 case MotionEvent.ACTION_DOWN:
159 idx = -1;
160 points.clear();
161 lineCanvas.drawColor(Color.BLACK);
162 last = null;
163
164
165 case MotionEvent.ACTION_MOVE:
166 if (last == null)
167 {
168 last = new PointF();
169 //lineCanvas.drawLine((int) event.getX(), (int) event.getY(), (int) event.getX(), (int) event.getY(), paint);
170 lineCanvas.drawPoint(event.getX(), event.getY(), paint);
171
172
173
174
175 } else
176 {
177 lineCanvas.drawLine(last.x, last.y, (int) event.getX(), (int) event.getY(), linepaint);
178
179 // Zeichnung
180 }
181
182 points.add(new PointF( event.getX(), event.getY()));
183 last.set(event.getX(), event.getY());
184
185
186 OnClick(points);
187
188 //Log.v("","Punkte" + points);
189
190
191
192
193 //SavePoints(points);
194
195
196 break;
197
198
199 case MotionEvent.ACTION_UP:
200 idx = 0;
201 break;
202
203 default:
204 break;
205 }
206
207 return true;
208 }
209
210
211 private void OnClick(ArrayList<PointF> points) {
212
213 // new AlertDialog.Builder(this).setMessage(R.string.app_name);
214 // TODO Auto-generated method stub
215
216
217 }
218
219 private void SavePoints(ArrayList<PointF> points) {
220 ArrayList<PointF> x = points; // Arraylist von Punkten die gespeichert werden sollen
221 }
222
223}
Gruß
max
— geändert am 13.09.2010, 14:52:24
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.