- Forum-Beiträge: 141
28.03.2013, 22:24:32 via Website
28.03.2013 22:24:32 via Website
Was will ich machen? Einen Punkt/Kreis/Markierung dynamisch über eine ImageView bewegen.
Was ich bisher an Code zusammengebastelt habe:
Ich rufe mir ein Bild als ImageView auf, das ich über fill_parent auf den ganzen Bildschirm werfe.
Danach rufe in meiner Main einen Intent auf, der mir einen Kreis (über canvas, s. Code unten) zeichnet und über onTouch meinem Finger folgt.
Dem Intent habe ich ein Style zugeordnet der mir den Intent transparent darstellt damit man die Karte aus der Main noch sieht.
Mein Problem hierbei: Die Fläche die Canvas nutzt/zur Verfügung steht um darauf zu zeichnen, würde ich gerne genau gleich der größe der Karte/des ImageViews setzen.
Ist das mit meinem Ansatz überhaupt möglich oder gibt es da eine bessere einfachere Variante? Bisher wollte nichts was ich ausprobiert habe so richtig funktionieren. Um später einen Punkt auf der Karte über Koordinatenrichtig darzustellen muss das zwingend zusammenpassen...
Danke im Vorraus für Hilfe
Activity im Manifest:
2 android:screenOrientation="landscape"
3 android:theme="@style/Theme.Transparent"></activity>
Layout XML:
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <Button
8 android:id="@+id/map"
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 android:text="Beenden" />
12
13 <ImageView
14 android:id="@+id/my_image"
15 android:layout_width="fill_parent"
16 android:layout_height="fill_parent" />
17</LinearLayout>
Intent der Main:
2 startActivity(showPosition);
Style XML:
2<resources>
3 <style name="Theme.Transparent" parent="android:Theme">
4 <item name="android:windowIsTranslucent">true</item>
5 <item name="android:windowBackground">@android:color/transparent</item>
6 <item name="android:windowContentOverlay">@null</item>
7 <item name="android:windowNoTitle">true</item>
8 <item name="android:windowIsFloating">true</item>
9 <item name="android:backgroundDimEnabled">false</item>
10 </style>
11</resources>
Canvas Klasse:
2
3import android.app.Activity;
4import android.content.Context;
5import android.content.Intent;
6import android.graphics.Bitmap;
7import android.graphics.BitmapFactory;
8import android.graphics.Canvas;
9import android.graphics.Color;
10import android.graphics.Paint;
11import android.graphics.PointF;
12import android.os.Bundle;
13import android.os.Environment;
14import android.util.Log;
15import android.view.MotionEvent;
16import android.view.View;
17
18public class ShowPosition extends Activity {
19 @Override
20 protected void onCreate(Bundle savedInstanceState) {
21 super.onCreate(savedInstanceState);
22 setContentView(new SampleView(this));
23
24 }
25 private class SampleView extends View {
26
27 private boolean isDrawing;
28 private PointF endPoint;
29 private Paint p;
30
31 public SampleView(Context context) {
32 super(context);
33 setFocusable(true); initalize();
34 }
35
36 private void initalize(){
37 p = new Paint();
38 p.setAntiAlias(true);
39 p.setColor(Color.RED);
40 p.setStyle(Paint.Style.STROKE);
41 p.setStrokeWidth(4.5f);
42 p.setAntiAlias(true);
43 }
44
45 @Override
46 protected void onDraw(Canvas canvas) {
47
48 if(isDrawing)
49 canvas.drawCircle(endPoint.x, endPoint.y, 50, p);
50 }
51
52
53 public boolean onTouchEvent(MotionEvent event) {
54
55 switch (event.getAction())
56 {
57 case MotionEvent.ACTION_DOWN:
58 endPoint = new PointF();
59 isDrawing = true;
60 break;
61
62 case MotionEvent.ACTION_MOVE:
63 if(isDrawing)
64 {
65 endPoint.x = event.getX();
66 endPoint.y = event.getY();
67 invalidate();
68 break;
69 }
70
71 case MotionEvent.ACTION_UP:
72 if(isDrawing)
73 {
74 endPoint.x = event.getX();
75 endPoint.y = event.getY();
76 invalidate();
77 isDrawing = false;
78 break;
79 }
80 }
81 return true;
82 }
83 }
84}
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.