Imageview Zoomen?

  • Antworten:11
PhoenixTH
  • Forum-Beiträge: 7

27.11.2013, 20:40:38 via Website

Heyy
Hab mal ne frage..
ich hab ein Großes bild in meiner Imageview
und da erkennt man nicht alles..
gibts da einen Code zum Zoomen?
suche schon lange danach aber hab bis jetzt nichts passendes gefunden
hoffe ihr könnt mir helfen
Danke

Mfg
PhoenixTH

Antworten
PhoenixTH
  • Forum-Beiträge: 7

28.11.2013, 16:50:20 via Website

Danke für die Antwort:)
Das mit der eigenen View hab ich versucht .. aber Stürzt wieder ab.. und wenn ich es mit WebView mache dann stürtzt es auch ab :/

Antworten
impjor
  • Forum-Beiträge: 1.793

28.11.2013, 18:29:10 via Website

Tja, schade!
.
.
.
.
Und, willst du jetzt aufgeben? :blink::blink::blink: Such nach dem Fehler, schau dir dein LogCat an oder zeig es hier.
LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
TheEvilOne
  • Forum-Beiträge: 311

28.11.2013, 22:40:26 via App

Such mal bei GitHub nach ImageViewTouch.

Damit geht's, hab ich auch schon eingesetzt.

Antworten
PhoenixTH
  • Forum-Beiträge: 7

29.11.2013, 14:16:43 via Website

Also ich habe es mit TouchImageView versucht Also hier mein Code:

1package de.Phoenix.gta5_cheats2;
2
3import android.content.Context;
4import android.graphics.Matrix;
5import android.graphics.PointF;
6import android.graphics.drawable.Drawable;
7import android.util.AttributeSet;
8import android.util.Log;
9import android.view.MotionEvent;
10import android.view.ScaleGestureDetector;
11import android.view.View;
12import android.widget.ImageView;
13
14public class Versteckte_Waffe extends ImageView {
15
16 Matrix matrix;
17
18 // We can be in one of these 3 states
19 static final int NONE = 0;
20 static final int DRAG = 1;
21 static final int ZOOM = 2;
22 int mode = NONE;
23
24 // Remember some things for zooming
25 PointF last = new PointF();
26 PointF start = new PointF();
27 float minScale = 1f;
28 float maxScale = 3f;
29 float[] m;
30
31
32 int viewWidth, viewHeight;
33 static final int CLICK = 3;
34 float saveScale = 1f;
35 protected float origWidth, origHeight;
36 int oldMeasuredWidth, oldMeasuredHeight;
37
38
39 ScaleGestureDetector mScaleDetector;
40
41 Context context;
42
43 public Versteckte_Waffe(Context context) {
44 super(context);
45 sharedConstructing(context);
46 }
47
48 public Versteckte_Waffe(Context context, AttributeSet attrs) {
49 super(context, attrs);
50 sharedConstructing(context);
51 }
52
53 private void sharedConstructing(Context context) {
54 super.setClickable(true);
55 this.context = context;
56 mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
57 matrix = new Matrix();
58 m = new float[9];
59 setImageMatrix(matrix);
60 setScaleType(ScaleType.MATRIX);
61
62 setOnTouchListener(new OnTouchListener() {
63
64 @Override
65 public boolean onTouch(View v, MotionEvent event) {
66 mScaleDetector.onTouchEvent(event);
67 PointF curr = new PointF(event.getX(), event.getY());
68
69 switch (event.getAction()) {
70 case MotionEvent.ACTION_DOWN:
71 last.set(curr);
72 start.set(last);
73 mode = DRAG;
74 break;
75
76 case MotionEvent.ACTION_MOVE:
77 if (mode == DRAG) {
78 float deltaX = curr.x - last.x;
79 float deltaY = curr.y - last.y;
80 float fixTransX = getFixDragTrans(deltaX, viewWidth, origWidth * saveScale);
81 float fixTransY = getFixDragTrans(deltaY, viewHeight, origHeight * saveScale);
82 matrix.postTranslate(fixTransX, fixTransY);
83 fixTrans();
84 last.set(curr.x, curr.y);
85 }
86 break;
87
88 case MotionEvent.ACTION_UP:
89 mode = NONE;
90 int xDiff = (int) Math.abs(curr.x - start.x);
91 int yDiff = (int) Math.abs(curr.y - start.y);
92 if (xDiff < CLICK && yDiff < CLICK)
93 performClick();
94 break;
95
96 case MotionEvent.ACTION_POINTER_UP:
97 mode = NONE;
98 break;
99 }
100
101 setImageMatrix(matrix);
102 invalidate();
103 return true; // indicate event was handled
104 }
105
106 });
107 }
108
109 public void setMaxZoom(float x) {
110 maxScale = x;
111 }
112
113 private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
114 @Override
115 public boolean onScaleBegin(ScaleGestureDetector detector) {
116 mode = ZOOM;
117 return true;
118 }
119
120 @Override
121 public boolean onScale(ScaleGestureDetector detector) {
122 float mScaleFactor = detector.getScaleFactor();
123 float origScale = saveScale;
124 saveScale *= mScaleFactor;
125 if (saveScale > maxScale) {
126 saveScale = maxScale;
127 mScaleFactor = maxScale / origScale;
128 } else if (saveScale < minScale) {
129 saveScale = minScale;
130 mScaleFactor = minScale / origScale;
131 }
132
133 if (origWidth * saveScale <= viewWidth || origHeight * saveScale <= viewHeight)
134 matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2, viewHeight / 2);
135 else
136 matrix.postScale(mScaleFactor, mScaleFactor, detector.getFocusX(), detector.getFocusY());
137
138 fixTrans();
139 return true;
140 }
141 }
142
143 void fixTrans() {
144 matrix.getValues(m);
145 float transX = m[Matrix.MTRANS_X];
146 float transY = m[Matrix.MTRANS_Y];
147
148 float fixTransX = getFixTrans(transX, viewWidth, origWidth * saveScale);
149 float fixTransY = getFixTrans(transY, viewHeight, origHeight * saveScale);
150
151 if (fixTransX != 0 || fixTransY != 0)
152 matrix.postTranslate(fixTransX, fixTransY);
153 }
154
155 float getFixTrans(float trans, float viewSize, float contentSize) {
156 float minTrans, maxTrans;
157
158 if (contentSize <= viewSize) {
159 minTrans = 0;
160 maxTrans = viewSize - contentSize;
161 } else {
162 minTrans = viewSize - contentSize;
163 maxTrans = 0;
164 }
165
166 if (trans < minTrans)
167 return -trans + minTrans;
168 if (trans > maxTrans)
169 return -trans + maxTrans;
170 return 0;
171 }
172
173 float getFixDragTrans(float delta, float viewSize, float contentSize) {
174 if (contentSize <= viewSize) {
175 return 0;
176 }
177 return delta;
178 }
179
180 @Override
181 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
182 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
183 viewWidth = MeasureSpec.getSize(widthMeasureSpec);
184 viewHeight = MeasureSpec.getSize(heightMeasureSpec);
185
186 //
187 // Rescales image on rotation
188 //
189 if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == viewHeight
190 || viewWidth == 0 || viewHeight == 0)
191 return;
192 oldMeasuredHeight = viewHeight;
193 oldMeasuredWidth = viewWidth;
194
195 if (saveScale == 1) {
196 //Fit to screen.
197 float scale;
198
199 Drawable drawable = getDrawable();
200 if (drawable == null || drawable.getIntrinsicWidth() == 0 || drawable.getIntrinsicHeight() == 0)
201 return;
202 int bmWidth = drawable.getIntrinsicWidth();
203 int bmHeight = drawable.getIntrinsicHeight();
204
205 Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + bmHeight);
206
207 float scaleX = (float) viewWidth / (float) bmWidth;
208 float scaleY = (float) viewHeight / (float) bmHeight;
209 scale = Math.min(scaleX, scaleY);
210 matrix.setScale(scale, scale);
211
212 // Center the image
213 float redundantYSpace = (float) viewHeight - (scale * (float) bmHeight);
214 float redundantXSpace = (float) viewWidth - (scale * (float) bmWidth);
215 redundantYSpace /= (float) 2;
216 redundantXSpace /= (float) 2;
217
218 matrix.postTranslate(redundantXSpace, redundantYSpace);
219
220 origWidth = viewWidth - 2 * redundantXSpace;
221 origHeight = viewHeight - 2 * redundantYSpace;
222 setImageMatrix(matrix);
223 }
224 fixTrans();
225 }
226}


Und sobald ich auf die seite gehe Sürzt die app einfach ab..

Und hier mein LogCat werde nicht schlau daraus..

11-29 12:53:59.006: D/dalvikvm(334): newInstance failed: no <init>()
11-29 12:53:59.017: D/AndroidRuntime(334): Shutting down VM
11-29 12:53:59.017: W/dalvikvm(334): threadid=1: thread exiting with uncaught exception (group=0x40015560)
11-29 12:53:59.037: E/AndroidRuntime(334): FATAL EXCEPTION: main
11-29 12:53:59.037: E/AndroidRuntime(334): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.Phoenix.gta5_cheats2/de.Phoenix.gta5_cheats2.Versteckte_Waffe}: java.lang.InstantiationException: de.Phoenix.gta5_cheats2.Versteckte_Waffe
11-29 12:53:59.037: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.os.Handler.dispatchMessage(Handler.java:99)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.os.Looper.loop(Looper.java:123)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-29 12:53:59.037: E/AndroidRuntime(334): at java.lang.reflect.Method.invokeNative(Native Method)
11-29 12:53:59.037: E/AndroidRuntime(334): at java.lang.reflect.Method.invoke(Method.java:507)
11-29 12:53:59.037: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-29 12:53:59.037: E/AndroidRuntime(334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-29 12:53:59.037: E/AndroidRuntime(334): at dalvik.system.NativeStart.main(Native Method)
11-29 12:53:59.037: E/AndroidRuntime(334): Caused by: java.lang.InstantiationException: de.Phoenix.gta5_cheats2.Versteckte_Waffe
11-29 12:53:59.037: E/AndroidRuntime(334): at java.lang.Class.newInstanceImpl(Native Method)
11-29 12:53:59.037: E/AndroidRuntime(334): at java.lang.Class.newInstance(Class.java:1409)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-29 12:53:59.037: E/AndroidRuntime(334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
11-29 12:53:59.037: E/AndroidRuntime(334): ... 11 more
11-29 13:09:31.069: D/AndroidRuntime(368): Shutting down VM
11-29 13:09:31.077: W/dalvikvm(368): threadid=1: thread exiting with uncaught exception (group=0x40015560)
11-29 13:09:31.087: E/AndroidRuntime(368): FATAL EXCEPTION: main
11-29 13:09:31.087: E/AndroidRuntime(368): android.content.ActivityNotFoundException: Unable to find explicit activity class {de.Phoenix.gta5_cheats2/de.Phoenix.gta5_cheats2.TouchImageView}; have you declared this activity in your AndroidManifest.xml?
11-29 13:09:31.087: E/AndroidRuntime(368): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.app.Activity.startActivityForResult(Activity.java:2827)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.app.Activity.startActivity(Activity.java:2933)
11-29 13:09:31.087: E/AndroidRuntime(368): at de.Phoenix.gta5_cheats2.Seite1.onClick(Seite1.java:69)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.view.View.performClick(View.java:2485)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.view.View$PerformClick.run(View.java:9080)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.os.Handler.handleCallback(Handler.java:587)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.os.Handler.dispatchMessage(Handler.java:92)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.os.Looper.loop(Looper.java:123)
11-29 13:09:31.087: E/AndroidRuntime(368): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-29 13:09:31.087: E/AndroidRuntime(368): at java.lang.reflect.Method.invokeNative(Native Method)
11-29 13:09:31.087: E/AndroidRuntime(368): at java.lang.reflect.Method.invoke(Method.java:507)
11-29 13:09:31.087: E/AndroidRuntime(368): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-29 13:09:31.087: E/AndroidRuntime(368): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-29 13:09:31.087: E/AndroidRuntime(368): at dalvik.system.NativeStart.main(Native Method)
11-29 13:12:50.107: D/dalvikvm(402): newInstance failed: no <init>()
11-29 13:12:50.118: D/AndroidRuntime(402): Shutting down VM
11-29 13:12:50.127: W/dalvikvm(402): threadid=1: thread exiting with uncaught exception (group=0x40015560)
11-29 13:12:50.147: E/AndroidRuntime(402): FATAL EXCEPTION: main
11-29 13:12:50.147: E/AndroidRuntime(402): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.Phoenix.gta5_cheats2/de.Phoenix.gta5_cheats2.Versteckte_Waffe}: java.lang.InstantiationException: de.Phoenix.gta5_cheats2.Versteckte_Waffe
11-29 13:12:50.147: E/AndroidRuntime(402): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.os.Handler.dispatchMessage(Handler.java:99)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.os.Looper.loop(Looper.java:123)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-29 13:12:50.147: E/AndroidRuntime(402): at java.lang.reflect.Method.invokeNative(Native Method)
11-29 13:12:50.147: E/AndroidRuntime(402): at java.lang.reflect.Method.invoke(Method.java:507)
11-29 13:12:50.147: E/AndroidRuntime(402): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-29 13:12:50.147: E/AndroidRuntime(402): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-29 13:12:50.147: E/AndroidRuntime(402): at dalvik.system.NativeStart.main(Native Method)
11-29 13:12:50.147: E/AndroidRuntime(402): Caused by: java.lang.InstantiationException: de.Phoenix.gta5_cheats2.Versteckte_Waffe
11-29 13:12:50.147: E/AndroidRuntime(402): at java.lang.Class.newInstanceImpl(Native Method)
11-29 13:12:50.147: E/AndroidRuntime(402): at java.lang.Class.newInstance(Class.java:1409)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-29 13:12:50.147: E/AndroidRuntime(402): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
11-29 13:12:50.147: E/AndroidRuntime(402): ... 11 more
11-29 13:12:52.408: I/Process(402): Sending signal. PID: 402 SIG: 9



Jemand ne idee? :/

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.11.2013, 14:24:58 via App

Wie steuerst du die Klasse an mit welchem befehl?
Hast du eine Instanz erstellt?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
PhoenixTH
  • Forum-Beiträge: 7

29.11.2013, 14:29:53 via Website

Bin noch totaler anfänger.. Was meinst du das? :(

Antworten
Barbaric Chicken
  • Forum-Beiträge: 66

29.11.2013, 15:21:51 via Website

Hi,

github.com/chrisbanes/PhotoView

schau mal das ist eine "erweiterte" ImageView zum darstellen von Photos. Du kannst aber natürlich auch andre Bilder reinladen.
Features der PhotoView sind:
Out of the box zooming, using multi-touch and double-tap.
Scrolling, with smooth scrolling fling.
Works perfectly when using used in a scrolling parent (such as ViewPager).
Allows the application to be notified when the displayed Matrix has changed. Useful for when you need to update your UI based on the current zoom/scroll position.
Allows the application to be notified when the user taps on the Photo.

Vielleicht hilft dir das weiter, ist nämlich wirklich sehr gut und sehr einfach einzubetten.

Viele Grüße

Antworten
PhoenixTH
  • Forum-Beiträge: 7

29.11.2013, 16:18:01 via Website

Barbaric Chicken
Hi,

github.com/chrisbanes/PhotoView

schau mal das ist eine "erweiterte" ImageView zum darstellen von Photos. Du kannst aber natürlich auch andre Bilder reinladen.
Features der PhotoView sind:
Out of the box zooming, using multi-touch and double-tap.
Scrolling, with smooth scrolling fling.
Works perfectly when using used in a scrolling parent (such as ViewPager).
Allows the application to be notified when the displayed Matrix has changed. Useful for when you need to update your UI based on the current zoom/scroll position.
Allows the application to be notified when the user taps on the Photo.

Vielleicht hilft dir das weiter, ist nämlich wirklich sehr gut und sehr einfach einzubetten.

Viele Grüße


Danke :D und wie bettet man die ein? :/

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.11.2013, 21:20:37 via App

Poste mal den Code deiner MainActivity von der aus die klasse waffen etc aufgerufen wird

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
PhoenixTH
  • Forum-Beiträge: 7

30.11.2013, 12:16:22 via Website

Habs hinbekommen! mit einer Webview

1import android.os.Bundle;
2import android.app.Activity;
3import android.webkit.WebView;
4
5
6public class Versteckte_Waffe extends Activity
7{
8
9
10 WebView webView;
11
12
13
14 @Override
15 public void onCreate(Bundle savedInstanceState)
16 {
17 super.onCreate(savedInstanceState);
18 setContentView(R.layout.activity_versteckte__waffe);
19
20 webView = (WebView)findViewById(R.id.webView);
21
22 String bild = "file:///android_asset/res/drawable-hdpi/map.png";
23 webView.loadUrl(bild);
24 webView.getSettings().setBuiltInZoomControls(true);
25 webView.getSettings().setUseWideViewPort(true);
26 webView.getSettings().setLoadWithOverviewMode(true);
27
28 }
29
30}

Antworten