Android Studio:在布局更改为正确布局后加载 ImageView
Android Studio: Load ImageView after layout change to proper layout
我有一个 Activity 可以滚动浏览图片列表,显示全屏图片(默认情况下,输入 activity 时)或下面有一些细节的图片。我通过更改包含详细信息的 FrameLayout 的可见性来做到这一点。
当图片全屏时,我想看到所有图片,所以我用 Glide 加载它;当我想查看细节时,我使用 centerCrop() 加载它。
问题是,当我想重新加载图片(从全屏模式到细节模式)时,imageView 保留旧布局,并在其上使用 centerCrop() (因为示例是来自同一设备的屏幕截图,它什么都不做) .
如果我只是在详细信息模式下滚动到下一张图片并返回,它会按预期工作。
我尝试了其他帖子中的一些内容(AsyncTast、invalidate、requestLayout),但 none 似乎有效。
从全屏模式向上滑动时:
我得到的:
我想要的是:
activity的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<!-- irrelevant stuff -->
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frameLayoutZoomImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2">
<com.example.gallery_app.customViews.ZoomImageView
android:id="@+id/fullscreen_ImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
<!-- a layout on top of the ImageView that contains some hidden buttons-->
</FrameLayout>
<FrameLayout
android:id="@+id/detail_split_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="3">
<include
layout="@layout/activity_image_detail"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</FrameLayout>
</LinearLayout>
想通了(有点),所以我想我会写给处于相同情况的任何人。
由于您需要 activity 重新计算布局,然后 运行 与加载图片相关的代码,因此如果您使用处理程序,它就可以工作,如下所示:
import android.os.Bundle
class FullscreenImageActivity : AppCompatActivity(), MyFlingListener{
private val handler = Handler()
private val loadSplitScreenPictureRunnable = Runnable {
//code that loads the inageView
}
private fun loadSplitScreenPicture(){
handler.post(loadSplitScreenPictureRunnable)
//there is no need to use postDelayed
}
}
此方法的明显缺点是在处理程序执行 Runnable 之前有一个可见的瞬间,尤其是在图片尚未缓存的情况下。
如果有人找到更好的方法,请告诉我。
我有一个 Activity 可以滚动浏览图片列表,显示全屏图片(默认情况下,输入 activity 时)或下面有一些细节的图片。我通过更改包含详细信息的 FrameLayout 的可见性来做到这一点。
当图片全屏时,我想看到所有图片,所以我用 Glide 加载它;当我想查看细节时,我使用 centerCrop() 加载它。 问题是,当我想重新加载图片(从全屏模式到细节模式)时,imageView 保留旧布局,并在其上使用 centerCrop() (因为示例是来自同一设备的屏幕截图,它什么都不做) .
如果我只是在详细信息模式下滚动到下一张图片并返回,它会按预期工作。 我尝试了其他帖子中的一些内容(AsyncTast、invalidate、requestLayout),但 none 似乎有效。
从全屏模式向上滑动时:
我得到的:
activity的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
<!-- irrelevant stuff -->
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frameLayoutZoomImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2">
<com.example.gallery_app.customViews.ZoomImageView
android:id="@+id/fullscreen_ImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
<!-- a layout on top of the ImageView that contains some hidden buttons-->
</FrameLayout>
<FrameLayout
android:id="@+id/detail_split_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="3">
<include
layout="@layout/activity_image_detail"
android:layout_height="match_parent"
android:layout_width="match_parent" />
</FrameLayout>
</LinearLayout>
想通了(有点),所以我想我会写给处于相同情况的任何人。 由于您需要 activity 重新计算布局,然后 运行 与加载图片相关的代码,因此如果您使用处理程序,它就可以工作,如下所示:
import android.os.Bundle
class FullscreenImageActivity : AppCompatActivity(), MyFlingListener{
private val handler = Handler()
private val loadSplitScreenPictureRunnable = Runnable {
//code that loads the inageView
}
private fun loadSplitScreenPicture(){
handler.post(loadSplitScreenPictureRunnable)
//there is no need to use postDelayed
}
}
此方法的明显缺点是在处理程序执行 Runnable 之前有一个可见的瞬间,尤其是在图片尚未缓存的情况下。 如果有人找到更好的方法,请告诉我。