GithubHelp home page GithubHelp logo

curtain's People

Contributors

soulqw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

curtain's Issues

GuideDialogFragment 内存泄漏问题

┬───
│ GC Root: Java local variable

├─ android.os.HandlerThread thread
│ Leaking: UNKNOWN
│ Thread name: 'Chrome_ProcessLauncherThread'
│ ↓ HandlerThread.
│ ~~~~~~~~~~~~
├─ android.os.Message instance
│ Leaking: UNKNOWN
│ ↓ Message.obj
│ ~~~
╰→ com.qw.curtain.lib.GuideDialogFragment instance
​ Leaking: YES (ObjectWatcher was watching this because com.qw.curtain.lib.GuideDialogFragment received Fragment#onDestroy() callback and Fragment#mFragmentManager is null)
​ key = 808150e5-b0d9-48e2-8dd7-a5ab7ebc580e
​ watchDurationMillis = 9469
​ retainedDurationMillis = 4465

METADATA

Build.VERSION.SDK_INT: 28
Build.MANUFACTURER: Xiaomi
LeakCanary version: 2.2
App process name: com.acadsoc.aiclass
Analysis duration: 14704 ms

点击事件

设置成高亮的View就不能设置点击事件了吗?

怎么随时关闭当前蒙层呢?

就是我现在是点击输入框开启蒙层,点击输入框外的一个按钮关闭蒙层,或者搜索出结果后关闭蒙层,我应该怎么实现呢?

CurtainFlow中push方法Bug

push是通过拿到nextNode然后判断是否为空进行下一个或者结束的,但是valueAt(int)方法会提前判断大小并throw越界异常

以下是CurtainFlow中push方法代码

    public void push() {
        int currentIndex = allCurtains.indexOfKey(currentCurtainId);
        int nextIndex = currentIndex + 1;
        Curtain nextNode = allCurtains.valueAt(nextIndex);
        if (null != nextNode) {
            doWhenCurtainUpdated(nextNode, nextIndex);
        } else {
            finish();
        }
    }

以下是SparseArray中valueAt(int index)方法

    public E valueAt(int index) {
        if (index >= mSize && UtilConfig.sThrowExceptionForUpperArrayOutOfBounds) {
            // The array might be slightly bigger than mSize, in which case, indexing won't fail.
            // Check if exception should be thrown outside of the critical path.
            throw new ArrayIndexOutOfBoundsException(index);
        }
        if (mGarbage) {
            gc();
        }

        return (E) mValues[index];
    }

我这边看的资源是android-29的,在另一部7.0对应24的手机上不会出问题,估计是android源码改过 #

空白区域点击事件传递

您好,咱们库支持高亮区域点击事件传递下去吗,比如我高亮区域是个按钮。点击空白区域的按钮
1 蒙层关闭 2 随后触发按钮后续的业务点击事件。我现在在 demo 里面修改空白区域的点击事件代码如下:
RecyclerViewActivity.java
@OverRide
public void onBindViewHolder(@nonnull RecyclerView.ViewHolder holder, int position) {
((TextView) (holder.itemView.findViewById(R.id.tv_text))).setText(data[position]);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@OverRide
public void onClick(View v) {
Toast.makeText(RecyclerViewActivity.this, "toast", Toast.LENGTH_SHORT).show();
}
});
}

目前是不支持。能否提供这种支持,或者指点一下应该怎么弄我自己来尝试修改然后 pull request 增加这种支持。

空指针异常

image

在bugly捕捉到的空指针,不能复现
下图是调用方式
image

GuideDialogFragment does not have a Dialog

来自firebase的crash上报:
Fatal Exception: java.lang.IllegalStateException: DialogFragment GuideDialogFragment{32950c} (fc103030-14dd-43f3-8128-980944c99aa7) GuideDialogFragment} does not have a Dialog.
at androidx.fragment.app.DialogFragment.requireDialog(DialogFragment.java:302)
at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:425)
at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1484)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:210)
at com.soulfa.voicechat.main.MainActivity.onStart(MainActivity.kt:149)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433)
at android.app.Activity.performStart(Activity.java:7978)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3512)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7857)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)

往抽空更新下,帮忙解决该问题

问个问题

想问下 我添加高亮界面之后 想获取到高亮控件的位置 然后修改引导提示的位置 这个能获取到吗

关于点击高亮View之后返回页面,高亮没有关闭问题

首先,当前问题我已找到方法解决,只是讨论下是不是还存在最优解

有个需求:

需要首页高亮几个View(只能点击高亮区域,其他区域点击无效),然后点击View之后会进行页面跳转,但是之后返回首页,高亮并没有显示

目前需要去手动取消高亮,得拿到那个Iguide对象,但是唯一可以的方法只能在setCallBack回调里获取到

 .setCallBack(object : Curtain.CallBack {
                        override fun onShow(curtain: IGuide?) {
+                           guideDialog = curtain //自己外层加个变量,展示的时候获取
                        }

                        override fun onDismiss(iGuide: IGuide?) {
                            
                        }
                    }).show()

我的期望:

可以调用show方法能够返回Iguide对象

Curtain(this@RecoveryFragment)
     .show()

我觉得这里show方法应该把那个fragment对象给返回,之后可以手动调用此对象的dismissGuide()来手动取消高亮

或者另一个思路

就是不需要开发者手动去取消高亮,能否在高亮View的那个区域进行事件拦截,如果点击了,则将当前高亮引导取消,并点击对应的View(直接调用View.performClick()应该可以?)

使用时有偏移

Screenshot_20231113_113740

手机:谷歌 pixel 5
版本:implementation 'com.github.soulqw:Curtain:0.3.0'
使用:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Curtain(this).with(findViewById(R.id.text)).show()
}
}

高亮的View无法响应点击事件

您好,在开发中我发现curtain.with(原界面中高亮的按钮),此时按钮原有的点击事件不响应了。请问如何能让高亮的view响应他原来的点击?

如何拦截返回键

如果拦截返回键,我监听了Activity的onBackPressed方法,但是有 CurtainFlow 的时候,该方法并没有触发

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.