单击图像视图时使工具栏消失
make toolbar disappear when image view is clicked
我想实现一个有点像焦点模式的功能,本质上,当有人在查看图像时单击图像视图时,除非重新单击,否则工具栏会消失。我相信这允许用户更多地关注图像而不是工具栏,除非他们想要图像上的信息。我修改了这个想法并尝试在图像视图上设置一个 onclick 功能,这样一旦单击它就会将工具栏上的可见性变为不可见,当再次单击它时它会使其可见。问题是我只能访问我为它设置的适配器中的图像视图,甚至当我得到正确的算法时(就像我放置打印语句来查看我输入的 if 语句,并且成功运行一样)但发生的事情是工具栏没有反应,就好像我无法与之通信一样。
来自适配器
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val page_layout: View = inflater.inflate(R.layout.activity_viewer, container, false)
val presenter: Toolbar = page_layout.findViewById<View>(R.id.presenter) as Toolbar
val image_layout: View = inflater.inflate(R.layout.view_pager_item, container, false)
val page_image: PhotoView = image_layout.findViewById<View>(R.id.page_image) as PhotoView
Picasso.get().load(PageList[position].link).into(page_image)
page_image.setOnClickListener(View.OnClickListener {
println("clicked")
println(presenter.visibility)
if (presenter.visibility == View.INVISIBLE) {
println("outside")
presenter.visibility = View.VISIBLE
} else {
println("inside")
presenter.visibility = View.INVISIBLE
}
})
container.addView(image_layout)
return image_layout
}
来自 activity
的 onCreate 方法
class Page_Activity : AppCompatActivity() {
lateinit var lstPages: MutableList<Page>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_viewer)
lstPages = ArrayList()
mangaPages()
val myrv = findViewById<View>(R.id.view_page) as ViewPager
myViewPager = PageViewAdapter(this, lstPages)
myrv.adapter = myViewPager
activity 的重点是进行调用,以便有一个充满图像 link 的数组,它会被抛入适配器,以便我可以将其显示回 activity。尽管如此,我还是用一个框架布局测试了这个概念,我在其中攻击了一个 onClickListener,但是出于某种原因,当我对适配器中的图像视图执行此操作时,它的行为有所不同。无论如何,如有任何帮助,我们将不胜感激!非常感谢!!!谢谢!
您的工具栏未按预期运行,因为您正在适配器中扩充新的工具栏。
在此代码中
val page_layout: View = inflater.inflate(R.layout.activity_viewer, container, false)
val presenter: Toolbar = page_layout.findViewById<View>(R.id.presenter) as Toolbar
因此,为了访问您在 Page_Activity
中扩充的工具栏,您可以实现从 adapter
到 Page_Activity
的回调,就像这样
首先,创建回调
interface PageImageCallback {
fun onClick()
}
然后,创建一个变量,setter 函数并在 adapter
class
中调用 onClick
函数
class Adapter() {
private lateinit var pageImageCallback: PageImageCallback
fun setPageImageCallback(pageImageCallback: PageImageCallback) {
this.pageImageCallback = pageImageCallback
}
...
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val image_layout: View = inflater.inflate(R.layout.view_pager_item, container, false)
val page_image: PhotoView = image_layout.findViewById<View>(R.id.page_image) as PhotoView
Picasso.get().load(PageList[position].link).into(page_image)
page_image.setOnClickListener(View.OnClickListener {
println("clicked")
pageImageCallback.onClick()
})
container.addView(image_layout)
return image_layout
}
}
最后,在Page_Activity
实现回调
class Page_Activity : AppCompatActivity(), PageImageCallback {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_viewer)
...
myViewPager.setPageImageCallback(this)
}
...
override fun onClick() {
if (presenter.visibility == View.INVISIBLE) {
println("outside")
presenter.visibility = View.VISIBLE
} else {
println("inside")
presenter.visibility = View.INVISIBLE
}
}
}
我想实现一个有点像焦点模式的功能,本质上,当有人在查看图像时单击图像视图时,除非重新单击,否则工具栏会消失。我相信这允许用户更多地关注图像而不是工具栏,除非他们想要图像上的信息。我修改了这个想法并尝试在图像视图上设置一个 onclick 功能,这样一旦单击它就会将工具栏上的可见性变为不可见,当再次单击它时它会使其可见。问题是我只能访问我为它设置的适配器中的图像视图,甚至当我得到正确的算法时(就像我放置打印语句来查看我输入的 if 语句,并且成功运行一样)但发生的事情是工具栏没有反应,就好像我无法与之通信一样。
来自适配器
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val page_layout: View = inflater.inflate(R.layout.activity_viewer, container, false)
val presenter: Toolbar = page_layout.findViewById<View>(R.id.presenter) as Toolbar
val image_layout: View = inflater.inflate(R.layout.view_pager_item, container, false)
val page_image: PhotoView = image_layout.findViewById<View>(R.id.page_image) as PhotoView
Picasso.get().load(PageList[position].link).into(page_image)
page_image.setOnClickListener(View.OnClickListener {
println("clicked")
println(presenter.visibility)
if (presenter.visibility == View.INVISIBLE) {
println("outside")
presenter.visibility = View.VISIBLE
} else {
println("inside")
presenter.visibility = View.INVISIBLE
}
})
container.addView(image_layout)
return image_layout
}
来自 activity
的 onCreate 方法class Page_Activity : AppCompatActivity() {
lateinit var lstPages: MutableList<Page>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_viewer)
lstPages = ArrayList()
mangaPages()
val myrv = findViewById<View>(R.id.view_page) as ViewPager
myViewPager = PageViewAdapter(this, lstPages)
myrv.adapter = myViewPager
activity 的重点是进行调用,以便有一个充满图像 link 的数组,它会被抛入适配器,以便我可以将其显示回 activity。尽管如此,我还是用一个框架布局测试了这个概念,我在其中攻击了一个 onClickListener,但是出于某种原因,当我对适配器中的图像视图执行此操作时,它的行为有所不同。无论如何,如有任何帮助,我们将不胜感激!非常感谢!!!谢谢!
您的工具栏未按预期运行,因为您正在适配器中扩充新的工具栏。
在此代码中
val page_layout: View = inflater.inflate(R.layout.activity_viewer, container, false)
val presenter: Toolbar = page_layout.findViewById<View>(R.id.presenter) as Toolbar
因此,为了访问您在 Page_Activity
中扩充的工具栏,您可以实现从 adapter
到 Page_Activity
的回调,就像这样
首先,创建回调
interface PageImageCallback {
fun onClick()
}
然后,创建一个变量,setter 函数并在 adapter
class
onClick
函数
class Adapter() {
private lateinit var pageImageCallback: PageImageCallback
fun setPageImageCallback(pageImageCallback: PageImageCallback) {
this.pageImageCallback = pageImageCallback
}
...
override fun instantiateItem(container: ViewGroup, position: Int): Any {
val image_layout: View = inflater.inflate(R.layout.view_pager_item, container, false)
val page_image: PhotoView = image_layout.findViewById<View>(R.id.page_image) as PhotoView
Picasso.get().load(PageList[position].link).into(page_image)
page_image.setOnClickListener(View.OnClickListener {
println("clicked")
pageImageCallback.onClick()
})
container.addView(image_layout)
return image_layout
}
}
最后,在Page_Activity
class Page_Activity : AppCompatActivity(), PageImageCallback {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_viewer)
...
myViewPager.setPageImageCallback(this)
}
...
override fun onClick() {
if (presenter.visibility == View.INVISIBLE) {
println("outside")
presenter.visibility = View.VISIBLE
} else {
println("inside")
presenter.visibility = View.INVISIBLE
}
}
}