以编程方式将 SurfaceView 添加到在 ImageView 下按 Z 顺序排列的 FrameLayout

2024-03-21

编辑2a:随意跳到底部询问简洁的问题。

I can 通过xml绘制SurfaceView https://stackoverflow.com/questions/5203547/draw-surfaceview-from-layout-xml。就我而言,我正在创建一本电子书,该电子书将在书的每一页的 SurfaceView 上运行不同的动画。

我有一个.xml布局有一个FrameLayout called @+id/animation_layout.

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    >
        <fi.harism.curl.CurlView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/curl"
        >
        </fi.harism.curl.CurlView>
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/animation_layout"
        />
        <include layout="@layout/narration" 
        />
    </RelativeLayout>

根据正在显示的书的哪一页,我想在我的一组类中添加一个类的不同实例,该类扩展了SurfaceView.

Page01SurfaceView extends PageAniSurfaceView {
    //
    // code here includes onDraw() definition
    //
}

Page02SurfaceView extends PageAniSurfaceView {
    //
    // code here includes onDraw() definition
    //
}

PageAniSurfaceView 基本上在实例化时创建一个线程,并在创建其视图时启动该线程。

public class PageAniSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private final String TAG = this.getClass().getSimpleName();
private TutorialThread _thread;

public PageAniSurfaceView(Context context) {
    super(context);
    init();
}

public PageAniSurfaceView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public void setBackground(int bg_id)
{
    // adding the callback (this) to the surface holder to intercept events
    getHolder().addCallback(this);
    // make the PageAniSurfaceView focusable so it can handle events
    setFocusable(true);

}

protected void init()
{
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    _thread = new TutorialThread(getHolder(), this);
    _thread.setRunning(true);
    _thread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    boolean retry = true;
    _thread.setRunning(false);
    while (retry) {
        try {
            _thread.join();
            retry = false;
        } catch (InterruptedException e) {
            // we will try it again and again...
        }
    }
}

protected void draw_bitmaps(Canvas canvas)
{
         // will be overridden by child classes
}

@Override
protected void onDraw(Canvas canvas) {
    if(this.getVisibility() == View.VISIBLE)
    {
        if(canvas != null)
        {
            draw_bitmaps(canvas);
        }
    }
}

public void update_bitmaps() 
{
         // will be overridden by child classes
}

public void elementStarted(PageElement _pageElement) {
    // Nothing in parent class
}

public void elementFinished(PageElement mElement) {
    // Nothing in parent class
}
}

我有一堂课叫PageDisplayer它跟踪我们正在浏览的页面,并且应该addView()我需要为该页面包含特定的 SurfaceView 类。

public void displayPage()
{
    page = sSystemRegistry.pageSystem.getCurrentPage();
    mBookReader.mAnimationLayout.removeAllViews();

    PageAniSurfaceView _ani = null;

    switch(page.index)
    {
    case 1:
        _ani = new Page01SurfaceView(mBookReader);
        break;
    case 2:
        _ani = new Page02SurfaceView(mBookReader);
        break;
    case 3:
        _ani = new Page03SurfaceView(mBookReader);
        break;

    }

    if(_ani != null)
    {
        _ani.setWillNotDraw(false);
                    // mBookReader.mAnimationLayout is a FrameLayout in my .xml
        mBookReader.mAnimationLayout.addView(_ani);
        mElementDisplayer.setElementListener(_ani);
    }
}

通过断点或 LogCat,我可以知道线程正在运行,并且 onDraws 正在被调用。例如,在 Page01SurfaceView 中定义和显示的位图绘制一次,但当 update_bitmaps() 更改位图的 (x,y) 坐标时不会重新绘制。

为什么每次调用时都没有绘制位图onDraw(Canvas)?

编辑:如果视图中有动画above位图,然后显示 SurfaceView 上的位图。

编辑2:简洁的问题:

Will an ImageViewZ 顺序排列在 a 之上SurfaceView保持SurfaceView来自绘画本身?

我应该只使用一个而不是一个SurfaceView?我要尝试一下并报告回来。


我只是使用 View,而不是 SurfaceView。

Dianne Hackborn 说“表面视图非常特殊,而不是真正的视图(表面是一个与你自己的 Z 排序的单独窗口),它们的 Z 排序与你的视图不匹配。表面视图是一个又大又重的对象;你是无意以这种方式将 SurfaceView 视为常规视图。”

https://groups.google.com/d/topic/android-developers/COffLpanlz0/discussion https://groups.google.com/d/topic/android-developers/COffLpanlz0/discussion

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以编程方式将 SurfaceView 添加到在 ImageView 下按 Z 顺序排列的 FrameLayout 的相关文章

  • 意图?如何注册以获得传入电子邮件提醒?

    这里是极限 Android 开发新手 好吧 Android 开发新手 而不是一般开发 我想编写一个应用程序 当电子邮件进入设备时会收到通知 并根据电子邮件中的数据 主题 发件人 收件人等 采取各种操作 我认为我要做的是创建一个带有 Inte
  • 如何将 Android Instrumentation 测试推送到模拟器/设备?

    我正在尝试使用 Ubuntu 9 04 中的命令行 shell 在 Android 模拟器上运行 Webkit 布局测试 adb s emulator 5554 shell am instrument w com android dumpr
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • 如何忽略 LeakCanary 中的某些类?

    有人能给我一个如何忽略 LeakCanary 中的某些类的有效示例吗 我正在查看这个示例 以忽略 LeakCanary 中第三方库中的某些类 但我不知道将其放在应用程序中的何处 我把它放在我的应用程序类中 但这些变量和方法有错误 isInA
  • FLAG_ACTIVITY_REORDER_TO_FRONT 被忽略

    我有一个包含项目列表的 FragmentActivity 当应用程序处于后台时 可以推送该项目列表 发生这种情况时 我想创建一个状态栏通知并提醒用户更新 当用户单击通知时 活动应重新排序到前面并显示在屏幕上 同时在列表底部显示新项目 所以我
  • 多语言 Android 应用程序:在电子邮件和密码字段中显示英文键盘

    我们正在开发一款多语言 Android 应用程序 针对英语和阿拉伯语 面临的问题是在登录和注册屏幕中 我们希望仅以英文文本输入用户名和密码字段 从而显示英文键盘 无论设备区域设置语言如何 已尝试在 edittext 中设置 inputtyp
  • android:进程和进程名称

    我试图理解android process属性 Ref says http developer android com guide topics manifest application element html proc 如果分配给该属性的
  • Android 消费品:“已经拥有该商品”,但 inventory.hasPurchase() 为 false

    我被 Google In App v3 困住了 我测试了一次没有消费的购买 例如 当应用程序在购买和消费之间崩溃时 现在我找不到出路 如果我尝试再次购买 它会显示 您已经拥有该商品 但是当我测试所有权时 它说我不拥有它 Inventory
  • Android - 多次实例化一个片段?

    我正在创建一个在 ListView 中显示数据的应用程序 数据分为两种类型 热门 收藏夹 我有一个活动和两个片段 片段根据类别显示项目列表 我为此使用了 ListView 然后我有两个fragment layouts 它们在设计上完全相同
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • 按名称获取 ArrayList

    这是正确的获取方式吗ArrayList
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • 使用后退按钮启动 Activity

    我正在 Android 中开发一个应用程序 我正在寻找解决方案 有一个活动 例如 A1 通过单击按钮 用户可以转到另一个活动 例如 A2 现在 一旦用户完成 A2 活动 他就会单击后退按钮 返回到上一个活动 A1 这是众所周知的事实 A1此
  • 从Android客户端登录appengine

    我正在尝试登录应用程序引擎并访问应用程序引擎中的用户服务API 基本上我希望能够看到谁登录了我的 servlet 我正在使用从 android 获取 authtoken 然后从应用程序引擎获取 ASID 或 SACID cookie 的身份
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • Android复杂布局线性和相对

    I have to implement a layout like shown in the diagram and I do not know the best combination to achieve the required de
  • 制作弹跳动画

    我想做图层的弹跳动画 我已经完成了该图层从右到中心的操作 现在我想将其向后移动一点 然后回到中心 这会产生反弹效果 我想我可以用这样的翻译来做到这一点

随机推荐

  • 安装扩展后 Visual Studio 2015 中缺少图标

    我跟着创建 Visual Studio 扩展的步骤 https msdn microsoft com en us library cc138589 aspx但是在VS2015中安装扩展后 Visual Studio在菜单的工具栏中不显示任何
  • 如何禁用从互联网到 Jelastic 节点的入口?

    默认情况下 在 Jelastic 中创建的每个资源都会获得一个 dns 条目 并且可以通过互联网进行访问 对于许多服务 例如数据库 我不希望出现这种行为 这是默认行为 这似乎很不安全 我只想从我的环境中的其他服务或通过 ssh 访问这些内容
  • 使用.net正则表达式平衡匹配捕获内部项目

    我找到了有关 net 正则表达式平衡匹配的以下资源 http weblogs asp net whaggard archive 2005 02 20 377025 aspx http weblogs asp net whaggard arc
  • Prometheus 为每个 pod 的多个指标端点抓取配置

    我们有一个 Kubernetes Pod 它提供多个指标端点 3093 metrics and 9113 metrics 但它还有一个不提供任何指标的端口 80 TL DR 是否可以只刮掉端口3093 and 9113 我们正在使用示例配置
  • WPF ListViewItem 颜色不正确

    我设置了一个非常基本的测试来解决我在使用 Visual Studio 2012 并在 Windows 8 1 上运行的针对 NET Framework 4 的 WPF 中遇到的颜色问题 问题在于 IsSelected 和 IsMouseOv
  • Eclipse与tomcat——eclipse修改server.xml

    我在 使用 tomcat 安装 模式下将 tomcat 与 eclipse 结合使用 我的问题是 eclipse 每次都会覆盖 tomcats server xml 并删除我的 crossContext true 元素 我应该使用自定义位置
  • 如何在 VB 6 中检查对象的类型? - 我不想使用“TypeOf”方法

    如何在 VB 6 0 中检查对象的类型 我们必须修改现有代码以使用 typeof 方法 是否有任何方法 例如将光标移动到对象变量上或像快速监视那样可以看到其类型 我知道以下方法 但我不想使用它 Set fs New Scripting Fi
  • 向 MultiIndex DataFrame 添加一个空行

    正如标题所暗示的 我想在我的MultiIndex DataFrame 第一级索引需要有一个定义的索引值 第二级索引需要是np nan 列中的值需要是np nan 考虑以下 import pandas as pd import numpy a
  • PyUsb USB 条码扫描器

    我正在尝试在 Ubuntu 中使用 Honeywell USB 3310g 扫描仪从条形码或 qrcode 输出字符串 我有 libusb 和一个名为 Metro usb 的库 http gitorious org other metro
  • Scheme/Racket有枚举操作吗?

    Scheme Racket 是否有相当于 Haskell 中的 a b 表示法的枚举表示法 在 Haskell 中 1 5 计算结果为列表 1 2 3 4 5 for list i in range 1 6 i sequence gt li
  • Spark流式批量查找数据

    我需要从 HDFS 上的文件查找 Spark 流作业中的一些数据 该数据由批处理作业每天获取一次 有没有 设计模式 为了这样的任务 如何在执行后立即重新加载内存中的数据 哈希图 每日更新 当查找数据时 如何连续服务流作业被抓取 一种可能的方
  • 电子如何创建增量文件

    I use electron builder构建我的应用程序并成功构建第一个版本 其中包含三个输出 foosetup exe foo 0 0 1 full nupkg 和 RELEASES 现在我想实现自动更新 并且我已经部署了后端服务通过
  • Scala 中语法糖的所有实例是什么?

    Scala 中语法糖的所有实例是什么 它们很难搜索 因为大多数 全部都是纯粹的符号 因此在不知道概念名称的情况下很难搜索 TODO 隐式转换 匿名函数的语法 其他我忘记的事情 Basics a b相当于a b a b c相当于a b c 除
  • 如何在 PHP / XAMPP 中启用 cURL

    如何在 PHP 中启用 cURL On Debian http en wikipedia org wiki Debian with Apache http en wikipedia org wiki Apache HTTP Server 2
  • 使用按钮在 Chart.js 中切换图表

    我是一名初学者开发人员 我一直在尝试使用 ChartJS 将一些数据显示到屏幕上 我希望能够单击一个按钮来生成另一组新的数据 轴 我一直在尝试遵循其他堆栈溢出答案 但似乎没有一个对我有用 请参见下文
  • 在 R 中操作变量以生成新数据集

    我是一个相对较新的 R 用户 如果对我的数据集有任何帮助 我真的很感激 我有一个包含 2400 万行的数据集 数据集中有 3 个变量 患者姓名 药房名称以及该次就诊时从药房领取的药物数量 有些患者多次出现在数据集中 即他们在不同时间点从不同
  • 如何在 dart/Flutter 中使用 Firebase 快照字典上的 SplayTreeMap?

    我已成功通过 StreamBuilder 取回数据并需要对其进行排序 如何按键对快照数据的映射进行排序 另外 如果你给出一个这样做的例子 我的价值也会有所帮助 我想我想做一个 SplayTreeMap 但如果有更好的方法请提供 这是我的字典
  • Knife Bootstrap 的 Chef 节点配置问题 - 无法通过服务器进行身份验证

    我正在尝试使用 Knife Bootstrap 设置厨师客户端节点 knife bootstrap nodename x user P passwd sudo 收到以下错误消息 Chef 在尝试创建客户端 nodename url com
  • JAXB - 如何序列化集合子类中的字段

    我在序列化我的类 ArrayList 的子类 中的字段时遇到问题 添加到列表中的项目已序列化 但字段未序列化 XmlRootElement public static class NumberedList extends ArrayList
  • 以编程方式将 SurfaceView 添加到在 ImageView 下按 Z 顺序排列的 FrameLayout

    编辑2a 随意跳到底部询问简洁的问题 I can 通过xml绘制SurfaceView https stackoverflow com questions 5203547 draw surfaceview from layout xml 就