Android 中用于接听电话的滑块按钮

2024-01-07

我想为来电开发自己的“接受”和“拒绝”按钮。为了防止从口袋里拿出手机时意外接听或拒绝来电,我想制作一个滑块式按钮或类似的东西。我是,接听电话不仅仅是点击“接听”按钮。这更像是从左向右(或相反)滑动手指,让按钮随着时间变宽。就像安卓一样。

有什么办法可以做到这一点吗?有什么提示吗?

我希望能说清楚。


创建一个图像并将其向右(或向左)滑动,然后将事件发送到您想要处理结果的活动或任何视图怎么样?

为此,您可以创建一个自定义视图来实现OnTouchListener :

public class ImageTouchSlider extends RelativeLayout implements View.OnTouchListener {

private Context mContext;

private ImageView mImage;   
private int mScreenWidthInPixel;
private int mScreenWidthInDp;
private float mDensity;

private int mPaddingInDp = 15;
private int mPaddingInPixel;

private int mLengthOfSlider;

public interface OnImageSliderChangedListener{
    void onChanged();
}

private OnImageSliderChangedListener mOnImageSliderChangedListener;

public ImageTouchSlider(Context context) {
    super(context);
    mContext = context;
    createView();
}

public ImageTouchSlider(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    createView();
}

public ImageTouchSlider(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mContext = context;
    createView();
}

public void createView() {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.image_touch_slider, this, true);

    mImage = (ImageView) findViewById(R.id.slider_image);
    mImage.setOnTouchListener(this);

    WindowManager manager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = manager.getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics ();
    display.getMetrics(outMetrics);

    mDensity  = getResources().getDisplayMetrics().density;
    float dpWidth  = outMetrics.widthPixels / mDensity;
    mScreenWidthInPixel = outMetrics.widthPixels;
    mScreenWidthInDp = (int) (mScreenWidthInPixel / mDensity);

    mLengthOfSlider = (int) (mScreenWidthInDp - mPaddingInDp*2);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    LayoutParams layoutParams = (LayoutParams) v.getLayoutParams();
    int width = v.getWidth();
    float xPos = event.getRawX();

    switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        // You can add some clicked reaction here.
        break;
    case MotionEvent.ACTION_MOVE:
        if(xPos < (mScreenWidthInPixel - width - mPaddingInDp*mDensity) && xPos > mPaddingInDp*mDensity) {
            mOnImageSliderChangedListener.onChanged();
            layoutParams.leftMargin = (int) xPos - width / 2;
            mImage.setLayoutParams(layoutParams);
        }
        break;
    case MotionEvent.ACTION_UP:
        break;
    default:
        break;
    }

    return true;
}

public void setOnImageSliderChangedListener(OnImageSliderChangedListener listener) {
    mOnImageSliderChangedListener = listener;
}

} //end of class

image_touch_slider.xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/slider"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_centerVertical="true"
    android:src="@drawable/your_drawable" />
</RelativeLayout>

您可以修改屏幕宽度计算部分(我当前的代码不太干净),并将此视图添加到.xml像这样 :

<com.your.package.path.ImageTouchSlider
      android:id="@+id/slider"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" />

在您的班级中,您可以找到以下视图:

ImageTouchSlider slider = (ImageTouchSlider) findViewById(R.id.slider);
slider.setOnImageSliderChangedListener(new ImageTouchSlider.OnImageSliderChangedListener() {

        @Override
        public void onChanged() {
            // do something what you want here.
        }

    });

希望这能有所帮助! :)

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

Android 中用于接听电话的滑块按钮 的相关文章

  • 在第一个框中输入字符后,将焦点转到下一个框

    我必须实现一个应用程序 其中我设置了较小的值edittext用于输入 PIN 码和手机号码 每个编辑文本一次包含 1 个字符 现在 当我运行这个应用程序时 我发现对于每个框 我需要将焦点放在每个框上edittext 因此 在这种情况下 是否
  • PopupWindow onitemclick 中的 Android Listview 在某些设备上不起作用

    我的 ListView 在 PopupWindow 内 当我显示 PopupWindow 并单击设备 ASUS K00z 中的 Listview 行时 fonepad 工作得很好 但在 HTC Z715e 中不起作用 项目单击事件未触发 1
  • 有没有一种方法可以在不使用意图的情况下在活动之间发送数据?

    我有一个对于每个用户来说都是唯一的用户名 我想将其发送到某个活动 但我不想使用意图 create an intent and sends username Intent intent new Intent RegisterOwner thi
  • 将JSON数据解析到Android ListView中

    我已经潜伏这个网站很长一段时间了 幸运的是 到目前为止我所有的问题都得到了解答 我希望你们中的一些人能够阐明我的问题 我可以成功地让 ListView 来显示字符串数组 但是当我尝试将 JSON 数据解析为数组时 我的程序只是强制关闭 而
  • Android:如何让设备只运行一个应用程序?

    我有一个客户项目 我必须制作单任务 Android 设备 客户无法逃脱我公司开发的应用程序 此外 客户无法启动任何其他应用程序 而我们的应用程序会在设备启动时启动 总体而言 客户能够使用设备执行的所有操作就是运行我们的应用程序 除了 roo
  • 使用Picasso从url保存图像?

    我正在尝试使用 API Picasso 保存图像 为了做到这一点 我正在尝试使用Target保存 但我无法完成这项工作 我怎么能这样做呢 Trying save image public static void imageDownload
  • 如何在Android中访问现有的sqlite数据库?

    到目前为止 我们已经在 Android 中开发了在运行时创建数据库的应用程序 我们想知道如何在 Android 应用程序中访问预构建或现有的数据库 sqlite 文件 请提供详细信息 查看文档android database sqlite
  • Android Studio 安装失败,APK 未签名

    最近从 Eclipse 更改为 Android Studio 我还更改了 JDKjava open jdk to jdk1 7 0 45 现在我尝试运行我的第一个应用程序 并收到以下消息 Installation failed since
  • ProgressBar.setInminateDrawable() 不起作用

    当我尝试更改我的 indeteminateDrawable 进度条就消失了 我必须更改我的进度条的可绘制对象 我尝试了invalidate requestLayout等 我不知道如何解决它 谢谢 这里的代码 progressBar setI
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • 垂直从上到下线手势检测器

    我用的是 手势工具 注意到对于垂直从上到下的线无法检测 因为我在代码中使用生成的手势文件 如下所示 但无法检测垂直从上到下的线手势检测 import java util ArrayList import android app Activi
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 如何使用共享首选项在两个 Android 应用程序之间共享数据?

    我有两个应用程序 App1 和 App2 我想使用共享首选项在 App1 中保存数据并在 App2 中访问 反之亦然 我可以在 App1 中保存数据并在 App2 中访问数据 但反之则不行 这就是我现在正在做的 在清单中 android s
  • 运行 Android 应用程序时出现错误

    我已经使用 Eclipse 创建了一个 Android 应用程序 但应用程序未在 AVD 上运行 它显示 不幸的是已停止工作 日志猫消息如下 07 29 04 59 50 789 W dalvikvm 784 threadid 1 thre
  • 分离 Fragment 和删除 Fragment 有什么区别?

    在 Android 文档中碎片交易 http developer android com reference android app FragmentTransaction html我注意到两种非常相似的方法 detach and remo
  • 通知操作而不启动新活动?

    我计划提供一个包含两个操作的提醒通知 一个用于批准登录请求 一个用于拒绝登录请求 通过单击这些操作中的任何一个 我希望向我的服务器发出 HTTP 请求 最重要的是 我不想启动新的 Activity 或根本不想将用户重定向到我的应用程序 Co
  • 如果我的应用程序安装在 SD 卡上,私人数据也在那里吗?

    我假设应用程序的私有数据 例如 SharedPreferences 和 SQLite 数据库 位于手机的内部存储而不是 SD 卡上 即使应用程序本身安装在 SD 卡上 我在任何地方都找不到对此的简单明确的确认 有人可以确认一下吗 是的 私有
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • Android - 如何简单地拖放按钮?

    我在这里找到了一个适合初学者的教程 http androidrox wordpress com 2011 05 13 android sample app drag and drop image using touch http andro

随机推荐

  • 与后端同步集合更改

    我使用 Backbone js 并且有一组模型 该集合被检索并显示在前端 在前端 我希望用户删除新模型并将其添加到集合中 当用户完成并单击 保存 时 我希望更新整个集合 这意味着当单击 保存 时 集合会同步 以某种方式 添加的模型将被保存
  • Windows 10 中 NVM 的访问被拒绝问题

    当我在 Windows 10 中使用 nvm v 命令时 我收到 访问被拒绝 的消息 我在这里遇到了类似的问题NVM 被拒绝访问 https stackoverflow com questions 48762782 nvm is acces
  • 在 Elixir 单元测试中导入测试代码

    我正在编写一些与 SSH 交互的 Elixir 代码的测试 在我的测试中 我想启动一个可以运行代码的 SSH 服务器 我更愿意将此代码存储在测试目录中它自己的文件中 并通过各种不同的测试导入它 但我还没能让这个工作得很好 我尝试过创建一个t
  • C# 替换文件中的字符串

    替换 HTML 文件内容的一部分时 String Replace 似乎无法正常工作 例如 String Replace 替换 with blah blah blah html gt 请注意 第二个 HTML 结束标记未正确关闭 因此当用户在
  • 强制所有类在多级继承层次结构中实现/重写“纯虚拟”方法

    在C 中为什么pure virtual方法强制其强制覆盖only到它的直接子级 用于对象创建 但不到孙子级等等 struct B virtual void foo 0 struct D B virtual void foo struct D
  • 数据库磁盘映像格式错误或文件已加密或不是数据库

    我需要将没有 Root 的手机上的数据库复制到pad上 所以我也采用了像其他人一样的方法 首先将 data data databases test db复制到 sdcard 然后我使用在我的电脑或我朋友的电脑上使用adb shell sql
  • 反转 Jenkins 的一次一次哈希

    我将如何获取与返回的哈希匹配的任何可能的字符串值 我不想获取所使用的确切密钥 只想获取传递给函数时将返回未知密钥的相同哈希值的任何密钥 uint32 t jenkins one at a time hash const uint8 t ke
  • #warning 和 #error 作为宏

    有没有办法让宏在编译时强制出现警告和错误 我目前有这样的事情 if defined clang define PRAGMA x Pragma x elif defined GNUC define PRAGMA x Pragma x elif
  • 渲染动作渲染部分

    据我了解 两者之间有很大区别Html RenderPartial包含在 ASP NET MVC 版本和HTML RenderAction in the Microsoft Web Mvc ViewExtensions包含在 MVC 期货中
  • React 动态设置状态属性

    我正在使用 React 并且有一些方法可以单独设置组件的状态 我有以下方法 setLineColor value this setState stroke value gt this props data this getStyleData
  • 如何在 Xcode 4 上创建新的“模板”类别并在那里使用我自己的文件模板?

    我想开始为 iOS 应用程序使用我自己的模板 我不想要任何重大的改变 但更简单的事情 比如 添加 删除一些样板代码 添加一些pragma mark部分 对每个文件硬编码我公司的名称和一些注释 改变缩进 等等等等等等 我们的想法是 我们将在创
  • 在 Java 中列出文件(按修改日期排序)的最佳方法?

    我想获取目录中的文件列表 但我想对其进行排序 以使最旧的文件排在第一位 我的解决方案是调用 File listFiles 并根据 File lastModified 重新使用列表 但我想知道是否有更好的方法 编辑 按照建议 我当前的解决方案
  • 组织毡尖笔:使用 JS 通过相邻项目的相似性优化 2D 网格中项目的排列 [更新]

    UPD 该问题已更新具体细节和代码 请参见下文 警告 这个问题是关于优化矩阵中项目的排列 这不是比较颜色 最初 我决定提供有关我的问题的背景会有帮助 我现在对这个决定感到后悔 因为结果恰恰相反 关于颜色的无关紧要的讨论太多 而几乎没有关于实
  • TS2538 类型“未定义”不能用作索引类型。当检查分配给变量时

    我收到 TS 错误 TypeScript 错误 类型 未定义 不能用作索引类型 TS2538 对于这个简单的函数 根据提供的索引从数组获取对象 const myArr Array name John name Tom function ge
  • 如何忽略asp.net表单中的url路由

    我正在使用 NET 3 5 SP1 框架 并且在我的应用程序中实现了 URL 路由 我收到 JavaScript 错误 Error ASP NET Ajax client side framework failed to load Reso
  • 如何改变GtkTextView的背景颜色?

    如何改变GtkTextView的背景颜色 我尝试使用普通的小部件设置 bg 功能 但 gtk 只是更改 GtkText 视图的边框颜色 另外 有人可以用简单的例子向我解释一下如何更改 GtkTextView 中的文本颜色 字体 文本大小 G
  • 在 SQL Server 2008 R2 中获取时区

    如何获取 Microsoft SQL Server 2008R2 中的时区列表 在 SQL Server 2008 中使用时区数据 http blogs msdn com b sqlprogrammability archive 2008
  • UDP 服务器出现分段错误

    我使用 UDP 编写了以下回显服务器 但我不知道为什么它在 sendto 函数中给我分段错误 它接收良好 但在将数据发送回客户端时出现问题 我已经尝试找到问题几个小时了 但一无所获 有人可以指出错误或我可能做错了什么吗 谢谢 include
  • Angularjs 使用自定义插值符号作为范围

    我目前有一个 underscore js 模板 我也想将其与 Angular 一起使用 并且仍然可以与 underscore 一起使用 我想知道是否可以使用指令更改特定范围的插值开始和结束符号 如下所示 angular directive
  • Android 中用于接听电话的滑块按钮

    我想为来电开发自己的 接受 和 拒绝 按钮 为了防止从口袋里拿出手机时意外接听或拒绝来电 我想制作一个滑块式按钮或类似的东西 我是 接听电话不仅仅是点击 接听 按钮 这更像是从左向右 或相反 滑动手指 让按钮随着时间变宽 就像安卓一样 有什