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

Schreibe einen Kommentar