2014-06-28 99 views
20

我從url獲取圖像並在imageView上顯示它。此功能正常工作。但是我希望當我點擊那個圖像時,它必須是全屏。那麼如何實現這個功能呢?我知道我錯過了一些東西。請幫幫我。截圖附上。我也想在我的應用程序中使用相同的功能。如何在imageView上點擊全屏顯示imageView?

Before clicking After clicking

這裏是我的代碼,我想對圖片點擊:

@Override 
    public void onClick(View v) { 
     if (isTouch1) { 
      horizontalScrollView.setVisibility(View.GONE); 
      isTouch1 = false; 
      // mSystemUiHider.toggle(); 
      setTheme(R.style.FullscreenTheme); 
      Log.d("Here isTouch is true", ">"); 
      // ChangeThemeUtils.changeToTheme(FullScreenImageAdapter.this, ChangeThemeUtils.THEME_HIDE_ALL_WINDOW); 
      getSupportActionBar().hide(); 

     } else { 
      isTouch1 = true; 
      horizontalScrollView.setVisibility(View.VISIBLE); 
      getSupportActionBar().show(); 
      setTheme(R.style.ExampleTheme); 
      //mSystemUiHider.show(); 
      Log.d("Here isTouch is false", ">");  
     } 
    } 
+0

做ü有這個解決方案?我正在尋找這個以及http://stackoverflow.com/questions/29197025/android-view-single-picture-like-photo-gallery – NaiveBz

回答

0

是的,我得到了訣竅。

public void onClick(View v) { 

      if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){ 
       imgDisplay.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

      } 
      else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
       imgDisplay.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
      else{} 

    } 

但它並沒有完全SOVE我的問題。其實我想隱藏水平滾動視圖,這是imageView(下圖)的盈方。這是不能隱藏的。

+1

此代碼不起作用,「但它並沒有完全解決我的問題。」 – Jorgesys

+0

它只隱藏圖像大小沒有變化 –

25

可以使用ImageView以下兩個屬性根據您的需要來顯示圖像:

  1. android:adjustViewBounds:如果您希望ImageView調整其波形,請將其設置爲true很難保持其可繪製的高寬比。

  2. android:scaleType:控制圖像應該如何調整大小或移動此的ImageView的大小,以匹配

    <ImageView 
        android:id="@+id/imageView" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:adjustViewBounds="true" 
        android:src="@drawable/ic_launcher"/> 
    

以上兩種屬性可以使用XML或java代碼。

,因爲你需要在運行時決定需要顯示圖像爲全屏幕或不那麼會使用高於在下面的Java代碼的兩個屬性:對於圖像的全尺寸的ImageView的

public class MainActivity extends Activity { 

    ImageView imageView; 

    boolean isImageFitToScreen; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     imageView = (ImageView) findViewById(R.id.imageView); 

     imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(isImageFitToScreen) { 
        isImageFitToScreen=false; 
        imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
        imageView.setAdjustViewBounds(true); 
       }else{ 
        isImageFitToScreen=true; 
        imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); 
        imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
       } 
      } 
     }); 

    } 
} 
+1

它爲我工作+ | – Jorgesys

+0

@ Jorgesys,那麼你可以通過upvote to欣賞。 –

+0

如何在RecyclerView適配器中使用相同的圖像視圖? –

7

使用下列財產

android:scaleType="fitXY" 

例如:

 <ImageView 
     android:id="@+id/tVHeader2" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="fitXY" 
     android:gravity="center" 
     android:src="@drawable/done_sunheading" /> 

1)上的其它活動WH開關單擊圖像。

2)在意圖

3)取對活動imageview的通url和上述的ImageView

4的屬性設置)獲得從意圖的網址,並設置圖像。

但使用此圖像可能會弄髒,如果它會小尺寸。

+1

這對我有效:) –

2

使用該屬性的形象圖,例如,

1)android:scaleType="fitXY" - 這意味着圖像將被拉伸以適應是基於你的ImageView的父四面八方!

2)通過使用上述屬性,它會影響你的圖像分辨率,所以如果你想保持分辨率,然後添加一個屬性,如android:scaleType="centerInside"

希望這可以幫助你!

0
public class MainActivity extends Activity { 

ImageView imgV; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imgV= (ImageView) findViewById("your Image View Id"); 

    imgV.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       imgV.setScaleType(ScaleType.FIT_XY); 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 
getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
getSupportActionBar().hide(); 
      } 
     } 
    }); 

} 
} 
+0

讓我試試這個答案。 –

+0

是啊試試這會幫助你 –

+0

不,它不幫助我。你不明白我的問題。看到屏幕截圖。我想隱藏圖像點擊紅色矩形。意味着我想隱藏上欄和下按鈕。你的回答是不是這樣做 –

6

這並沒有爲我工作,我用從網上的一些代碼的部分,我做了什麼:

新的活動:FullScreenImage有:

package yourpackagename; 
import yourpackagename.R; 


import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class FullScreenImage extends Activity { 


@SuppressLint("NewApi") 



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

    setContentView(R.layout.layout_full); 

    Bundle extras = getIntent().getExtras(); 
    Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap"); 

    ImageView imgDisplay; 
    Button btnClose; 


    imgDisplay = (ImageView) findViewById(R.id.imgDisplay); 
    btnClose = (Button) findViewById(R.id.btnClose); 


    btnClose.setOnClickListener(new View.OnClickListener() {    
    public void onClick(View v) { 
    FullScreenImage.this.finish(); 
} 
}); 


imgDisplay.setImageBitmap(bmp); 

} 


} 

然後創建一個XML: layout_full

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ImageView 
    android:id="@+id/imgDisplay" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scaleType="fitCenter" /> 

<Button 
    android:id="@+id/btnClose" 
    android:layout_width="wrap_content" 
    android:layout_height="30dp" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginRight="15dp" 
    android:layout_marginTop="15dp" 
    android:paddingTop="2dp" 
    android:paddingBottom="2dp" 
    android:textColor="#ffffff" 
    android:text="Close" /> 

    </RelativeLayout> 

最後,森d從圖像名稱您mainactivity

final ImageView im = (ImageView)findViewById(R.id.imageView1) ; 
    im.setBackgroundDrawable(getResources().getDrawable(id1)); 

    im.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View view) { 
     Intent intent = new Intent(NAMEOFYOURCURRENTACTIVITY.this, FullScreenImage.class); 

     im.buildDrawingCache(); 
     Bitmap image= im.getDrawingCache(); 

     Bundle extras = new Bundle(); 
     extras.putParcelable("imagebitmap", image); 
     intent.putExtras(extras); 
     startActivity(intent); 

           } 
          }); 
12

使用沉浸式全屏模式

enter image description here

ImageView點擊呼叫fullScreen()

public void fullScreen() { 

     // BEGIN_INCLUDE (get_current_ui_flags) 
     // The UI options currently enabled are represented by a bitfield. 
     // getSystemUiVisibility() gives us that bitfield. 
     int uiOptions = getWindow().getDecorView().getSystemUiVisibility(); 
     int newUiOptions = uiOptions; 
     // END_INCLUDE (get_current_ui_flags) 
     // BEGIN_INCLUDE (toggle_ui_flags) 
     boolean isImmersiveModeEnabled = 
       ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions); 
     if (isImmersiveModeEnabled) { 
      Log.i(TAG, "Turning immersive mode mode off. "); 
     } else { 
      Log.i(TAG, "Turning immersive mode mode on."); 
     } 

     // Navigation bar hiding: Backwards compatible to ICS. 
     if (Build.VERSION.SDK_INT >= 14) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 
     } 

     // Status bar hiding: Backwards compatible to Jellybean 
     if (Build.VERSION.SDK_INT >= 16) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN; 
     } 

     // Immersive mode: Backward compatible to KitKat. 
     // Note that this flag doesn't do anything by itself, it only augments the behavior 
     // of HIDE_NAVIGATION and FLAG_FULLSCREEN. For the purposes of this sample 
     // all three flags are being toggled together. 
     // Note that there are two immersive mode UI flags, one of which is referred to as "sticky". 
     // Sticky immersive mode differs in that it makes the navigation and status bars 
     // semi-transparent, and the UI flag does not get cleared when the user interacts with 
     // the screen. 
     if (Build.VERSION.SDK_INT >= 18) { 
      newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; 
     } 

     getWindow().getDecorView().setSystemUiVisibility(newUiOptions); 
     //END_INCLUDE (set_ui_flags) 
    } 

more

Download