我已经在这方面工作了几天了。我想要做的就是将存储在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的最佳和正确的方法?
如果您需要更多代码或信息,请告知我们。 提前谢谢!
答案 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)
错误发生在其他地方。我绝不会猜到。因为解决方案没有关系,所以没有必要在这里发布。