ImageView未显示在片段中

时间:2013-07-27 15:49:10

标签: android android-fragments imageview

我已经在这方面工作了几天了。我想要做的就是将存储在SD卡上的图像放入片段内的ImageView中。

我将本教程用于导航抽屉布局: http://developer.android.com/training/implementing-navigation/nav-drawer.html

这个更深层次的实施: hxxp://www.androidbegin.com/tutorial/implementing-actionbarsherlock-side-menu-navigation-drawer-in-android/

这是fragment1.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView 
    android:id="@+id/workingimageview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"/>
<!--
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@string/Fragment1"
    android:id="@+id/textview1" />
-->
</RelativeLayout>

这是包含内容和抽屉导航的xml:

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<!-- The main content view -->
<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- Slideout Menü -->
<ListView 
    android:id="@+id/left_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:background="#111" />

</android.support.v4.widget.DrawerLayout>

这是片段onCreateView源代码:

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle   
    savedInstanceState)
{
    View rootView = inflater.inflate(R.layout.fragment1, container, false);

    /** Load temporary image */
    /** Check if folder exists first */

    if(checkForWorkingDirectory())
    {
        workingImageView = (ImageView) 
                    rootView.findViewById(R.id.workingimageview);
          workingImageView.setImageBitmap(scaleImage.decodeSampledBitmapFromResource(returnAbsoluteFilePath(),100,100));
    }


    return rootView;

    //return inflater.inflate(R.layout.fragment1, null);
}

checkForWorkingDirectory()基本上查找图像所在的目录 和returnAbsoluteFilePath()说明了一切:)

根本不显示ImageView。但是,如果我注释掉ImageView和 只显示TextView,文本显示就好了。

我也试过这个,因为当我加载图像时我不知道ImageView的尺寸: http://adanware.blogspot.de/2012/06/android-getting-measuring-fragment.html

基于教程,我使用了什么是在片段中显示ImageView的最佳和正确的方法?

如果您需要更多代码或信息,请告知我们。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

在我的代码中看到同样的问题后,我在我的日志中实际查找后发现了我的问题,我发现了以下错误。

位图太大而无法上传到纹理(2340x4160,max = 4096x4096)。

我通过扩展ImageView类并重载setImageBitmap和onMeasure方法解决了我的问题。

公共类ScaledImageView扩展了ImageView {

private Bitmap mBitmap;

public ScaledImageView(Context context) {
    this(context, null);
}

public ScaledImageView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public ScaledImageView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
public void setImageBitmap(Bitmap bm) {
    mBitmap = bm;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);

    if (mBitmap != null) {
        int w = mBitmap.getWidth();
        int h = mBitmap.getHeight();
        int scaledHeight = (int)(((float)parentWidth / (float)w) * h);
        super.setImageBitmap(Bitmap.createScaledBitmap(mBitmap, parentWidth, scaledHeight, true));
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

}

答案 1 :(得分:-4)

错误发生在其他地方。我绝不会猜到。因为解决方案没有关系,所以没有必要在这里发布。