Hilfe bei onDraw()

  • Antworten:2
Nikola Markovic
  • Forum-Beiträge: 2

05.12.2011, 14:06:53 via Website

Hallo!
Ich versuche mich in der Android Programmierung für ein Projekt.
1package projekt.wuuli;
2
3import android.content.Context;
4import android.graphics.Canvas;
5import android.graphics.Color;
6import android.graphics.Paint;
7import android.util.AttributeSet;
8import android.view.SurfaceHolder;
9import android.view.SurfaceView;
10
11public class Panel extends SurfaceView implements SurfaceHolder.Callback {
12 private CanvasThread canvasthread;
13 private Paint paint = new Paint();
14 public Canvas canvas;
15 public boolean isInitialized;
16 private int x=0;
17 private int y=0;
18 private int xx=100;
19 private int yy=300;
20 private boolean zeichnen = false;
21
22 public Panel(Context context, AttributeSet attrs) {
23 super(context, attrs);
24 // TODO Auto-generated constructor stub
25 getHolder().addCallback(this);
26 canvasthread = new CanvasThread(getHolder(), this);
27 setFocusable(true);
28 }
29
30 public Panel(Context context) {
31 super(context);
32 getHolder().addCallback(this);
33 canvasthread = new CanvasThread(getHolder(), this);
34 setFocusable(true);
35 isInitialized = false;
36
37 }
38
39 public void re(){
40 zeichnen = true;
41 }
42
43 @Override
44 public void onDraw(Canvas canvas) {
45 paint.setColor(Color.GREEN);
46 if(!zeichnen){
47 re();
48 canvas.drawLine(0, 0, 100, 300, paint);
49 canvas.drawLine(1, 0, 101, 300, paint);
50 }
51 }
52
53 @Override
54 public void surfaceChanged(SurfaceHolder holder, int format, int width,
55 int height) {
56 // TODO Auto-generated method stub
57
58 }
59
60 @Override
61 public void surfaceCreated(SurfaceHolder holder) {
62 // TODO Auto-generated method stub
63 setWillNotDraw(false);
64 canvasthread.setRunning(true);
65 canvasthread.start();
66
67 }
68
69 @Override
70 public void surfaceDestroyed(SurfaceHolder holder) {
71 // TODO Auto-generated method stub
72 boolean retry = true;
73 canvasthread.setRunning(false);
74 while (retry) {
75 try {
76 canvasthread.join();
77 retry = false;
78 } catch (InterruptedException e) {
79 // we will try it again and again...
80 }
81 }
82 }
83 public void setX(int x){
84 this.x = x;
85 }
86 public void setXX(int xx){
87 this.xx = xx;
88 }
89 public void setY(int y){
90 this.y = y;
91 }
92 public void setYY(int yy){
93 this.yy = yy;
94 }
95
96 public int getX(){
97 return x;
98 }
99 public int getXX(){
100 return xx;
101 }
102 public int getY(){
103 return y;
104 }
105 public int getYY(){
106 return yy;
107 }
108}

1package projekt.wuuli;
2
3
4import android.app.Activity;
5import android.content.Context;
6import android.content.Intent;
7import android.graphics.Canvas;
8import android.graphics.Color;
9import android.graphics.Paint;
10import android.graphics.PixelFormat;
11import android.os.Bundle;
12import android.view.SurfaceHolder;
13import android.view.SurfaceView;
14import android.view.View;
15import android.view.View.OnClickListener;
16import android.widget.ImageButton;
17import android.widget.LinearLayout;
18
19public class Spiel extends Activity {
20 private ImageButton bf1;
21 private ImageButton bf2;
22 private ImageButton bf3;
23 private ImageButton bf4;
24 private ImageButton bf5;
25 private ImageButton bf6;
26
27 private ImageButton ba1;
28 private ImageButton ba2;
29 private ImageButton ba3;
30 private ImageButton ba4;
31 private ImageButton ba5;
32 private ImageButton ba6;
33
34 private float fx;
35 private float fy;
36 private float ax;
37 private float ay;
38
39
40
41
42 //
43
44
45
46 public void onCreate(Bundle savedInstanceState) {
47 super.onCreate(savedInstanceState);
48 setContentView(R.layout.spiel);
49 SurfaceView sv= (SurfaceView) this.findViewById(R.id.SurfaceView01);
50 sv.setZOrderOnTop(true); // necessary
51 sv.getHolder().setFormat(PixelFormat.RGBA_8888);
52
53
54 bf1 = (ImageButton) this.findViewById(R.id.bf1);
55 bf1.setOnClickListener(new OnClickListener() {
56 @Override
57 public void onClick(View v) {
58 fx = bf1.getScrollX();
59 fy = bf1.getScrollY();
60
61 }
62
63 });
64 bf2 = (ImageButton) this.findViewById(R.id.bf2);
65 bf2.setOnClickListener(new OnClickListener() {
66 @Override
67 public void onClick(View v) {
68 fx = bf2.getScrollX();
69 fy = bf2.getScrollY();
70 }
71
72 });
73 bf3 = (ImageButton) this.findViewById(R.id.bf3);
74 bf3.setOnClickListener(new OnClickListener() {
75 @Override
76 public void onClick(View v) {
77 fx = bf3.getScrollX();
78 fy = bf3.getScrollY();
79
80 }
81
82 });
83 bf4 = (ImageButton) this.findViewById(R.id.bf4);
84 bf4.setOnClickListener(new OnClickListener() {
85 @Override
86 public void onClick(View v) {
87
88 fx = bf4.getScrollX();
89 fy = bf4.getScrollY();
90 }
91
92 });
93 bf5 = (ImageButton) this.findViewById(R.id.bf5);
94 bf5.setOnClickListener(new OnClickListener() {
95 @Override
96 public void onClick(View v) {
97 fx = bf5.getScrollX();
98 fy = bf5.getScrollY();
99
100 }
101
102 });
103 bf6 = (ImageButton) this.findViewById(R.id.bf6);
104 bf6.setOnClickListener(new OnClickListener() {
105 @Override
106 public void onClick(View v) {
107 fx = bf6.getScrollX();
108 fy = bf6.getScrollY();
109
110 }
111
112 });
113 ba1 = (ImageButton) this.findViewById(R.id.ba1);
114 ba1.setOnClickListener(new OnClickListener() {
115 @Override
116 public void onClick(View v) {
117 ax = ba1.getScrollX();
118 ay = ba1.getScrollY();
119
120
121 //Drawing(fx,fy,ax,ay);
122 }
123
124 });
125 ba2 = (ImageButton) this.findViewById(R.id.ba2);
126 ba2.setOnClickListener(new OnClickListener() {
127 @Override
128 public void onClick(View v) {
129 ax = ba2.getScrollX();
130 ay = ba2.getScrollY();
131
132
133 //Drawing(fx,fy,ax,ay);
134 }
135
136 });
137 ba3 = (ImageButton) this.findViewById(R.id.ba3);
138 ba3.setOnClickListener(new OnClickListener() {
139 @Override
140 public void onClick(View v) {
141
142 ax = ba3.getScrollX();
143 ay = ba3.getScrollY();
144
145
146 //Drawing(fx,fy,ax,ay);
147 }
148
149 });
150 ba4 = (ImageButton) this.findViewById(R.id.ba4);
151 ba4.setOnClickListener(new OnClickListener() {
152 @Override
153 public void onClick(View v) {
154 ax = ba4.getScrollX();
155 ay = ba4.getScrollY();
156
157 //Drawing(fx,fy,ax,ay);
158 }
159
160 });
161 ba5 = (ImageButton) this.findViewById(R.id.ba5);
162 ba5.setOnClickListener(new OnClickListener() {
163 @Override
164 public void onClick(View v) {
165 ax = ba5.getScrollX();
166 ay = ba5.getScrollY();
167
168
169 //Drawing(fx,fy,ax,ay);
170 }
171
172 });
173 ba6 = (ImageButton) this.findViewById(R.id.ba6);
174 ba6.setOnClickListener(new OnClickListener() {
175 @Override
176 public void onClick(View v) {
177 ax = ba6.getScrollX();
178 ay = ba6.getScrollY();
179
180
181 //Drawing(fx,fy,ax,ay);
182 }
183
184 });
185 }
186
187
188
189}

1package projekt.wuuli;
2
3import android.graphics.Canvas;
4import android.view.SurfaceHolder;
5
6
7
8public class CanvasThread extends Thread {
9 private SurfaceHolder _surfaceHolder;
10 private Panel _panel;
11 private boolean _run = false;
12
13 public CanvasThread(SurfaceHolder surfaceHolder, Panel panel) {
14 _surfaceHolder = surfaceHolder;
15 _panel = panel;
16 }
17
18 public void setRunning(boolean run) {
19 _run = run;
20 }
21
22 @Override
23 public void run() {
24 Canvas c;
25 while (_run) {
26 c = null;
27 try {
28 c = _surfaceHolder.lockCanvas(null);
29 synchronized (_surfaceHolder) {
30 _panel.onDraw(c);
31 }
32 } finally {
33 // do this in a finally so that if an exception is thrown
34 // during the above, we don't leave the Surface in an
35 // inconsistent state
36 if (c != null) {
37 _surfaceHolder.unlockCanvasAndPost(c);
38 }
39 }
40 }
41 }
42}

Mein Problem ist das hiermit eine Linie gezeichnet wird aber nur beim Aufruf. Ich will aber mit einem ButtonKlick eine Linie zeichnen. Wie macht man das? ich kann die Methode onDraw() nicht neuladen...
Also bei einem Klick auf einen Button soll eine Linie gezeichnet werden,
Hoffe mir kann jemand helfen!!!

Antworten
Nikola Markovic
  • Forum-Beiträge: 2

05.12.2011, 14:30:42 via Website

Matze S.
Moin Nikola,

erstmal herzlich willkommen hier bei AndroidPit. :)

Ich verschieb deinen Thread mal zu den Entwicklern, die können dir sicher weiter helfen.

Grüße Matze :)

Ok danke ^^

Antworten