2013-07-02 73 views
1

我有一個很奇怪的問題,我似乎無法修復。ScrollView裏面的ImageView不會調整大小來填充屏幕(保持方面)

我似乎無法調整位於ScrollView內的ImageView的位圖大小。 我測試了相同的佈局(但沒有滾動),圖像的大小應該是這樣。

我發現其他人有這種問題,對於大多數使用android:fillViewport="true"就足夠了,但對我來說是行不通的。

這是我的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"  
     android:fillViewport="true" 
     android:background="@drawable/bg_app" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:background="@drawable/custom_white_background" 
      android:padding="5dp"> 

      <ImageView 
       android:id="@+id/full_image_view" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:adjustViewBounds="true" 
       android:scaleType="fitCenter" 
       android:src="@drawable/bg_app" 
       android:contentDescription="@string/otl_img_description" 
       android:layout_margin="5dp" 
       android:padding="5dp" />    

      <View 
       android:id="@+id/divider2" 
       android:layout_width="match_parent" 
       android:layout_height="3dp" 
       android:layout_below="@+id/full_image_view" 
       android:layout_centerHorizontal="true" 
       android:layout_marginLeft="5dp" 
       android:paddingRight="5dp" 
       android:layout_marginRight="5dp" 
       android:paddingLeft="5dp" 
       android:alpha="0.3" 
       android:background="@color/black_50" 
       android:fadingEdge="horizontal" /> 

      <TextView 
       android:id="@+id/onthelist_animal_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentLeft="true" 
       android:layout_below="@+id/full_image_view" 
       android:layout_margin="5dp" 
       android:layout_toLeftOf="@+id/onthelist_animal_date" 
       android:gravity="left|center" 
       android:padding="5dp" 
       android:text="@string/otl_animal_name" 
       android:textColor="@color/blue" 
       android:textStyle="bold" 
       android:textSize="18sp" /> 

      <TextView 
       android:id="@+id/onthelist_animal_date" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/full_image_view" 
       android:layout_centerHorizontal="true" 
       android:layout_margin="5dp" 
       android:gravity="center" 
       android:padding="5dp" 
       android:text="@string/otl_animal_date" 
       android:textColor="#a00000" 
       android:textStyle="bold" 
       android:textSize="18sp" /> 

      <ImageButton 
       android:id="@+id/onthelist_share" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignBottom="@+id/onthelist_animal_date" 
       android:layout_alignParentBottom="true" 
       android:layout_alignParentRight="true" 
       android:layout_alignTop="@+id/onthelist_animal_date" 
       android:layout_toRightOf="@+id/onthelist_animal_date" 
       android:adjustViewBounds="true" 
       android:paddingRight="5dp" 
       android:contentDescription="@string/otl_animal_share" 
       android:scaleType="fitEnd" 
       android:src="@android:drawable/ic_menu_share" 
       android:background="@android:color/transparent" />   

     </RelativeLayout> 

     <Button 
      android:id="@+id/onthelist_save" 
      style="@style/ButtonText" 
      android:layout_height="wrap_content" 
      android:background="@layout/custom_red_button" 
      android:text="@string/otl_save" 
      android:layout_margin="5dp" 
      android:padding="5dp" /> 

     <TextView 
      android:id="@+id/onthelist_animal_description" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="5dp" 
      android:background="@drawable/custom_white_background" 
      android:padding="5dp" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:textColor="@color/black" 
      android:text="@string/otl_animal_description" 
      android:linksClickable="true" /> 

    </LinearLayout> 
</ScrollView> 

,我設置圖像的ImageView的full_image_view這樣的:

 imageView = (ImageView) findViewById(R.id.full_image_view); 
    Log.i("OnTheList", "itemID[FI] = " + position); 
    try { 
     imageView.setImageBitmap(new ImageLoadTask().execute(
       JSONParserOnTheList.ANIMALS.get(position).photo).get());    
    } catch (InterruptedException e) { 
     imageView.setImageResource(R.drawable.default_photo); 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     imageView.setImageResource(R.drawable.default_photo); 
     e.printStackTrace(); 
    } 

的的AsyncTask返回一個位圖。

謝謝。

EDIT(解決方案 - > FIX)

許多事物和方法後應用試圖解決我找到了解決這一問題。 這個想法是,佈局工作正常,問題是,在某些設備上,由於像素密度,圖像調整了較小的版本。

當我解碼位圖時,我應用的修正直接在asynctask中。

所以佈局和一切保持不變和asyntask是這樣的:

private class ImageLoadTask extends AsyncTask<String, Void, Bitmap> { 
    private Bitmap bitmap; 
    @Override 
    protected void onPreExecute() { 
     loading.setTitle("Loading image ..."); 
     loading.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     try { 
      URL url; 
      url = new URL(params[0]); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      BitmapFactory.Options options = new BitmapFactory.Options(); 

      // Bitmap scale depending on density 
      // For example: 
      // 1600*1200 image to be resized to 640*480 
      // (1600*2 equal to 640*5) 
      options.inDensity = 5; 
      options.inTargetDensity = 2; 
      options.inScaled = false; 
      // Decode the bitmap 
      bitmap = BitmapFactory.decodeStream(input, null, options); 
      input.close(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     loading.dismiss(); 
     loading.cancel(); 
     super.onPostExecute(result); 
    } 
} 

通告BitmapFactory的選項是修復該問題的重要組成部分。

而且,爲了不有一個非常大的圖像(又名全尺寸圖像),你可以給取決於屏幕的大小,這樣的尺寸:

ImageView imageView = (ImageView) findViewById(R.id.full_image_view); 
imageView.setMaxHeight(screenSize()[0]-150); 
imageView.setMaxWidth(screenSize()[1]-150); 


private int[] screenSize() { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 

    int height = metrics.heightPixels; 
    int width = metrics.widthPixels; 

    return new int[] {height, width}; 

希望這有助於任何人,在這個鬥爭未來。 }

+0

經過一些測試後,我發現這可能是因爲我在ImageView中放置了一個位圖... 當我通過XML佈局將相同的圖像從drawable的ImageView中放入ImageView時,它的大小可以調整。 有誰知道我該如何解決這個問題? 謝謝! –

+0

我注意到的另一件事是,在一些設備上一切正常。從我在這裏測試,結果如下: 它適用於:三星Galaxy Tab 2.0和HTC Desire Bravo。 它不適用於:Samsung Galaxy S4。 這可能是什麼原因? –

回答

0

請用一句話說明問題的話,對其他部分的變化全部:

android:layout_below="@+id/full_image_view" 
android:layout_alignBottom="@+id/onthelist_animal_date" 
android:layout_alignTop="@+id/onthelist_animal_date" 
android:layout_toRightOf="@+id/onthelist_animal_date" 

要:

android:layout_below="@id/full_image_view" 
android:layout_alignBottom="@id/onthelist_animal_date" 
android:layout_alignTop="@id/onthelist_animal_date" 
android:layout_toRightOf="@id/onthelist_animal_date" 

E.G. - 刪除「+」,這僅用於「android:id」並標記佈局的名稱。

+0

問題是顯示的圖像沒有調整大小(它更小,更小),這意味着我希望根據設備屏幕大小調整大小(但也要保持它的比例)。 在佈局中的項目安排不是一個問題,但ImageView的大小! –

2

請加fadingEdge和fillViewport以滾動型

<ScrollView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"  
     android:fillViewport="true" 
     android:fadingEdge="none" 
     android:background="@drawable/bg_app" > 
0

Here是真正簡單的解決方案! 在您的ImageView中使用android:scaleType="fitXY"

相關問題