URLから画像を取得して、imageViewに表示しています。この機能は正常に機能しています。しかし、私はその画像をクリックすると、それがフルスクリーンでなければなりません。では、この機能をどのように実現するのでしょうか?私は何かが欠けていることを知っています。私を助けてください。スクリーンショットが添付されています。アプリにも同じ機能が必要です。
これが私の画像クリックで試しているコードです:
@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", ">");
}
}
はい、私はトリックを得ました。
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{}
}
しかし、それは私の問題を完全に解決しませんでした。水平スクロールビューも非表示にしたいのですが、これはimageView(下)の前にあり、これでは非表示にできません。
要件に基づいて画像を表示するには、2つのプロパティの下で ImageView を使用できます。
Android:adjustViewBounds :ImageViewで境界を調整して、ドロウアブルのアスペクト比を維持する場合、これをtrueに設定します。
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"/>
上記の2つのプロパティは、xmlまたはJavaコードのいずれかを使用できます。
実行時に画像を全画面に表示するかどうかを決定する必要があるため、上記の2つのプロパティを以下のJavaコードで適用します。
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);
}
}
});
}
}
没入型フルスクリーンモードを使用
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)
}
読み取り 詳細
例 ダウンロード
画像のフルサイズにImageViewの次のプロパティを使用します
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)画像をクリックすると他のアクティビティをオンにします。
2)意図的にURLを渡す
3)そのアクティビティでimageviewを取り、imageviewの上記のプロパティを設定します
4)意図からURLを取得し、その画像を設定します。
ただし、これを使用すると、サイズが小さい場合、画像にデンプンが付着する可能性があります。
それは私にはうまくいきませんでした、私はウェブからいくつかのコードパーツを使用しました、私がやったこと:
新しいアクティビティ:FullScreenImage with:
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>
そして最後に、yourmainactivityから画像名を送信します
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);
}
});
次のような画像ビューにこのプロパティを使用します。
1)Android:scaleType="fitXY"
-ImageView
に基づく親のすべての側面に合わせて画像が引き伸ばされることを意味します!
2)上記のプロパティを使用すると、画像の解像度に影響するため、解像度を維持する場合は、Android:scaleType="centerInside"
などのプロパティを追加します。
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();
}
}
});
}
}
実際にフルスクリーンを有効にするには、次の3つの方法があります: https://developer.Android.com/training/system-ui/immersive
ただし、アクティビティが開かれたときに全画面表示にしたい場合は、このコードをyour_activity.Javaに入れるだけです。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
hideSystemUI();
}
}
private void hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
// Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
private void showSystemUI() {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:background="#000"
Android:gravity="center"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<ImageView
Android:scaleType="fitXY"
Android:layout_marginTop="5dp"
Android:layout_marginBottom="60dp"
Android:src="@drawable/lwt_placeholder"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:adjustViewBounds="true"
Android:visibility="visible"
Android:id="@+id/imageView"
Android:layout_centerInParent="true"/></RelativeLayout>
そして活動中
final ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
PhotoViewAttacher photoAttacher;
photoAttacher= new PhotoViewAttacher(imageView);
photoAttacher.update();
Picasso.with(ImageGallery.this).load(imageUrl).placeholder(R.drawable.lwt_placeholder)
.into(imageView);
それでおしまい!