单击图像视图时使工具栏消失

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 中扩充的工具栏,您可以实现从 adapterPage_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
        }
   }
}