怎么设置android中的popupwindow进入和退出的动画

怎么设置android中的popupwindow进入和退出的动画,第1张

首先定义显示效果的动画文件:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate

android:fromXDelta="0"

android:toXDelta="0"

android:fromYDelta="120"

android:toYDelta="0"

android:duration="500" />

</set>

然后定义消失效果的动画文件:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate

android:fromXDelta="0"

android:toXDelta="0"

android:fromYDelta="0"

android:toYDelta="120"

android:duration="500" />

</set>

PopupWindow的动画显示效果是通过setAnimationStyle(int id)方法设置的,其中id为一个style的id,所以我们要在styles.xml文件中设置一个动画样式:

<style name="popwin_anim_style">

<item name="android:windowEnterAnimation">@anim/menushow</item>

<item name="android:windowExitAnimation">@anim/menuhide</item>

</style>

然后在程序中为PopupWindow设置就成:

PopupWindow pop = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

pop.setAnimationStyle(R.style.popwin_anim_style)

.d出必须要有一个相应的样式View

View view = LayoutInflater.from(context).inflate(R.layout.public_pop, null)

1

1

2.d窗必须设置宽高,可选设置出现和隐藏动画

PopupWindow window = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, isForce)

window.setAnimationStyle(R.style.pop_style_fade)

1

2

3

1

2

3

3.d窗的点击事件处理

//这里必须要注意将内容里的根布局的点击事件设为null,不然就会发生点击内容布局pop也会消失,在测试时必须用真机的返回键测试

//当需求为点击PopupWindow外部消失时

//要让点击PopupWindow之外的地方PopupWindow消失你需要调用

window.setBackgroundDrawable(new ColorDrawable(0))

window.setOutsideTouchable(false)

window.setFocusable(true)

contentLayout.setOnClickListener(null)

//实现根布局的点击事件,点击外部消失

parentLayout.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

window.dismiss()

}

})

//当需求为点击PopupWindow外部不消失时,点击返回退出程序--》应用场景:强制更新

//相当于整个根布局一直获取着焦点不会释放

window.setFocusable(true)

parentLayout.setFocusable(true)

parentLayout.setFocusableInTouchMode(true)

parentLayout.setOnKeyListener(new View.OnKeyListener() {

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK){

window.dismiss()

System.exit(0)

return true

}

return false

}

})

popwindow设置setTouchable和setOutsideTouchable为true,在activity上设置dispathTouchEvent监听事件

恩 这样是可以d出来popwindow了。。但是现在又有一个问题出现了 因为我在这里写了一个mPageWidget.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent e) {

boolean ret = false

事件 用来实现翻页的功能。。但是只要我写你你说的那个 就不可以翻页了 这是怎么的啊。。。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11339682.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存