Wie Sie programmgesteuert anzeigen eines Bildes mit einem text (oder Taster, oder andere) overlay?
Habe ich ein Bild für die Anzeige über eine Bildansicht element. Basierend auf Benutzereingaben (z.B. durch langes drücken) dann möchte ich das overlay etwas auf diesem Bild, so dass die überlagerung ist in der Mitte des Bildschirms (oder irgendwo anders als an der oberen linken Ecke zumindest... aber der Schlüssel ist, dass es überlagert das Bild und dass ich wählen kann, die Position im code. Es möglicherweise ein informativer TextView-Element (kein Toast), oder einige Ephemere zoom-Tasten).
All dies wird irgendwann ein Kind von einem ScrollView irgendeiner Art (wahrscheinlich TwoDScrollView, aber wenn du einen besseren Vorschlag, lass es mich wissen), damit unabhängig von text oder eine Schaltfläche gelegt bekommt sollte nicht ausschließen, die Möglichkeit. WebView ist nicht eine option, obwohl. Ich würde wahrscheinlich ein RelativeLayout, es sei denn, Sie haben einen besseren Vorschlag.
Ich das tun möchte, programmgesteuert - nicht in XML. Ich erwarte nicht, dass ein volles Programm, von niemandem (es sei denn, man ist bereits vorhanden... ich habe nicht einen gefunden, allerdings noch nicht). Ich brauche nur einen soliden überblick, wie das geschehen richtig für einige text über ein Bild.
Edit: ich habe dich schon den ganzen Tag und ich habe viele Ideen, aber Sie sind entweder XML-oder nur völlig anders als das, was ich versuche zu tun. Wenn, jedoch, Sie haben einen Zeiger, um etwas passendes bitte lassen Sie mich wissen!
Edit 2: Hier ist ein funktionierendes Beispiel, das ich geschaffen, das ist, was ich zu bewerkstelligen. Hoffentlich wird nützlich sein für andere! animage1 ist ein 1000x1000px-Bild... der Punkt ist, es ist größer als der Bildschirm, den Sie verwenden. animage2 ist relativ klein (100x100px). "Menü" ist überladen zu blenden, das zweite Bild als proof-of-concept.
package com.myname.testoverlay2;
//import android.widget.HorizontalScrollView; //Works with this as well
import com.myname.testoverlay2.TwoDScrollView;
//From - http://blog.gorges.us/2010/06/android-two-dimensional-scrollview/
// with fix added from comments there
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class Testoverlay2Activity extends Activity {
private static final String TAG = "MyApp";
ImageView iv2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout fl1 = new FrameLayout(this);
FrameLayout.LayoutParams flp1 = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
fl1.setId(9001);
fl1.setLayoutParams(flp1);
TwoDScrollView sv1 = new TwoDScrollView(this);
sv1.setId(9002);
FrameLayout fl2 = new FrameLayout(this);
FrameLayout.LayoutParams flp2 = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
fl2.setId(9003);
fl2.setLayoutParams(flp2);
ImageView iv1 = new ImageView(this);
FrameLayout.LayoutParams ivp1 = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
iv1.setId(9004);
iv1.setLayoutParams(ivp1);
Bitmap bm1 = BitmapFactory.decodeResource(getResources(),
getResources().getIdentifier("animage1" , "drawable", getPackageName()));
iv1.setImageBitmap(bm1);
//Log.d(TAG, "Bitmap1 = (" + bm1.getWidth() + ", " + bm1.getHeight() + ")");
iv2 = new ImageView(this);
FrameLayout.LayoutParams ivp2 = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER);
iv2.setId(9005);
iv2.setLayoutParams(ivp2);
Bitmap bm2 = BitmapFactory.decodeResource(getResources(),
getResources().getIdentifier("animage2" , "drawable", getPackageName()));
iv2.setImageBitmap(bm2);
//Log.d(TAG, "Bitmap2 = (" + bm2.getWidth() + ", " + bm2.getHeight() + ")");
//Lay everything out
fl1.addView(sv1);
fl1.addView(iv2);
sv1.addView(fl2);
fl2.addView(iv1);
setContentView(fl1);
//The following is based on a StackOverflow comment that scrollTo won't work immediately, in general...
//http://stackoverflow.com/questions/4720469/horizontalscrollview-auto-scroll-to-end-when-new-views-are-added
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
public void run() {
TwoDScrollView container=(TwoDScrollView)findViewById(9002);
if (container != null) {
Log.d(TAG, "executing scrollTo()");
//container.setOverScrollMode(TwoDScrollView.OVER_SCROLL_IF_CONTENT_SCROLLS); //Needed?
container.scrollTo(500,500);
}
else {
Log.d("MyApp", "Container is null");
}
}
}, 100L);
}
//Keyboard wedge for testing convenience
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d(TAG, "Keypress = (" + keyCode + ")");
switch (keyCode) {
case KeyEvent.KEYCODE_MENU:
/* Sample for handling the Menu button globally */
if (iv2.getVisibility() == ImageView.VISIBLE) {
iv2.setVisibility(ImageView.INVISIBLE);
}
else {
iv2.setVisibility(ImageView.VISIBLE);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
InformationsquelleAutor MartyMacGyver | 2011-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verlängern Sie die view-Klasse und überschreiben der ondraw-Methode. Mit der Leinwand, ziehen Sie eine bitmap oder auch text oben drauf.
Von dem, was ich Verstand, Sie müssen die Texte erscheinen in der Mitte und unabhängig von der scrollview. Dies ist die Struktur der Benutzeroberfläche würde ich
Erstellen dieser layout-Programm, das ist in etwa so, wie Sie es tun.
Der obige code sollte gehen in der onCreate-Methode. Das ist nur, wie Sie es grob. Sie müssen einige änderungen vornehmen oder Ergänzungen machen es für Sie arbeiten.
in diesem Fall mit einem framelayout für die meisten einfachen Lösungen. Es zeichnet Ihre untergeordneten Ansichten übereinander, basierend auf seinem Auftrag.
FrameLayout tun die gleiche Sache RelativeLayout ist: der text bleibt in der Ecke, anstatt in der Mitte des Bildschirms und bewegt sich mit den Blättern. Ich brauche den überlagerten text zu erscheinen und zu bleiben in der Mitte, unabhängig von der scroll-Zustand von dem, was unten ist. In gewisser Weise ist es wie ein toast aber auch wieder, das kann ein button oder ein anderes Objekt komplexer als text überlagert das Bild unten.
Hinweis: ich würde upvote, aber ich habe nicht genug Ruf doch... ich mache einige tests mit FrameLayout über XML, aber ich würde wirklich gerne sehen, eine programmatische Art und Weise, dies zu erreichen.
Ich habe meine Antwort aktualisiert
InformationsquelleAutor blessenm