Antwort

3

Ich würde vorschlagen, die folgende Art und Weise zu tun (die Annäherung an einen in this question ähnlich ist).

z. Sie haben die folgende xml (Ich bin nicht sicher, was Header sind und Tabs, so dass sie übersehen werden):

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:id="@+id/scroller"> 
     <ImageView 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_gravity="center" 
      android:id="@+id/image" 
      android:src="@drawable/image001" 
      android:scaleType="fitXY" /> 
</ScrollView> 

Dann Aktivität wie das aussehen könnte folgende:

public class MyActivity extends Activity { 

    private static final String TAG = "MyActivity"; 

    private ScrollView mScroll = null; 
    private ImageView mImage = null; 

    private ViewTreeObserver.OnGlobalLayoutListener mLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      final Rect imageRect = new Rect(0, 0, mImage.getWidth(), mImage.getHeight()); 
      final Rect imageVisibleRect = new Rect(imageRect); 

      mScroll.getChildVisibleRect(mImage, imageVisibleRect, null); 

      if (imageVisibleRect.height() < imageRect.height() || 
        imageVisibleRect.width() < imageRect.width()) { 
       Log.w(TAG, "image is not fully visible"); 
      } else { 
       Log.w(TAG, "image is fully visible"); 
      } 

      mScroll.getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutListener); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Show the layout with the test view 
     setContentView(R.layout.main); 

     mScroll = (ScrollView) findViewById(R.id.scroller); 
     mImage = (ImageView) findViewById(R.id.image); 

     mScroll.getViewTreeObserver().addOnGlobalLayoutListener(mLayoutListener); 
    } 
} 

Bei kleinen Bild, um es wird protokollieren: Bild ist vollständig sichtbar.

Allerdings sollten Sie über folgende Unstimmigkeit darüber im Klaren sein (wie in meinem Verständnis): Wenn Sie große Bild haben, aber es Skalierung zu tun (zB Sie setzen android:layout_width="wrap_content"), wenn es skaliert wird aussehen, aber tatsächlich ImageView Höhe sein als volle Höhe des Bildes (und ScrollView wird sogar Scrollen), so könnte adjustViewBounds benötigt werden. Der Grund für dieses Verhalten ist, dass FrameLayoutdoesn't care about layout_width and layout_height of childs.