小编Pēt*_*une的帖子

如何在Android中实现可扩展面板?

有没有一种简单的方法可以创建可扩展/可折叠的块,就像在官方市场应用程序中看到的那样?

市场应用程序的屏幕截图,当您单击"更多"按钮时,描述部分将展开动画:

在此输入图像描述

我知道SlidingDrawer但它似乎不适合这样的东西 - 它应该被放在叠加中,并且不支持半开状态.

更新:

这是我的半工作解决方案.这是一个扩展的自定义小部件LinearLayout.它很有用,但不能很好地处理边缘情况,比如内容高度小于collapsedHeight参数.我确信有足够的凝视力,挖掘代码并试验怪癖可以修复.希望避免这样做,并通过使用现成的官方或第三方解决方案节省一些时间.无论如何,这里是代码:

package com.example.androidapp.widgets;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.widget.LinearLayout;

import com.example.androidapp.R;

public class ExpandablePanel extends LinearLayout {

    private final int mHandleId;
    private final int mContentId;

    private View mHandle;
    private View mContent;

    private boolean mExpanded = true;
    private int mCollapsedHeight = 0;
    private int mContentHeight = 0;

    public ExpandablePanel(Context context) {
        this(context, null);
    }

    public ExpandablePanel(Context context, AttributeSet attrs) {
        super(context, …
Run Code Online (Sandbox Code Playgroud)

android widget

61
推荐指数
4
解决办法
5万
查看次数

我应该混淆Android应用程序存储的OAuth消费者秘密吗?

我的Android应用程序包含Twitter API的OAuth消费者秘密.目前它.properties以纯文本形式存档,因此有人无需花费精力在APK中查找.

我是否应该采取措施来掩盖它(例如,rot13或存储在混淆的Java代码中)?或者我应该避免做任何这样的事情,因为它会造成虚假的安全感?

人们通常如何在Android应用中分发/存储OAuth秘密?这个秘密被盗和被滥用的常见程度如何?

security storage android oauth

43
推荐指数
1
解决办法
1万
查看次数

如何在RESTful API中使用OpenID?

我正在使用RESTful API构建基于Pylons的Web应用程序,该API目前缺少任何身份验证.所以我要实现它,为了避免存储用户密码的所有麻烦和谨慎,我想使用OpenID进行身份验证.最好的方法是什么?这两件事是否兼容?是否存在使用OpenID的现有REST API,我可以从中获取灵感?

openid api rest pylons

31
推荐指数
1
解决办法
1万
查看次数

Android模拟器似乎以96khz录制音频

我的应用程序正在录制来自手机麦克风的音频,并对其进行实时处理.它在物理设备上工作正常,但在模拟器中表现得很"有趣".它记录了一些东西,但我不太确定它的录音是什么.

看起来在仿真器上,音频样本的读取速率是实际设备的两倍.在应用程序中,我有一个可视化进度小部件(一个水平移动的记录头),它在模拟器中移动大约两倍.

这是录音循环:

int FREQUENCY = 44100;
int BLOCKSIZE = 110;

int bufferSize = AudioRecord.getMinBufferSize(FREQUENCY,
        AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT) * 10;

AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER,
        FREQUENCY, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT,
        bufferSize);

short[] signal = new short[BLOCKSIZE * 2]; // Times two for stereo

audioRecord.startRecording();

while (!isCancelled()) {
    int bufferReadResult = audioRecord.read(signal, 0, BLOCKSIZE * 2);
    if (bufferReadResult != BLOCKSIZE * 2)
        throw new RuntimeException("Recorded less than BLOCKSIZE x 2 samples:"
                + bufferReadResult);

    // process the `signal` array here
}

audioRecord.stop();
audioRecord.release();
Run Code Online (Sandbox Code Playgroud)

音频源设置为"CAMC​​ORDER"并以立体声录制.这个想法是,如果手机有多个麦克风,应用程序将处理来自两者的数据并使用具有更好SNR的任何一个.但如果录制单声道,我也有同样的问题 …

android android-emulator audiorecord

13
推荐指数
1
解决办法
631
查看次数

关于 Docker Compose 的 `start_period` 参数的澄清

我试图了解start_periodDocker Compose 的工作原理。如果我们进行以下健康检查:

--start-period=60s --retries=2
Run Code Online (Sandbox Code Playgroud)

这是否意味着 Docker Swarm 会尝试两次,每次等待 60 秒才认为容器不健康?

谢谢。

docker docker-compose docker-swarm

13
推荐指数
1
解决办法
2万
查看次数

防止电子邮件扫描器激活“取消订阅”链接的策略

我想在我的服务发送的电子邮件的页脚中提供一个单击“取消订阅”链接。

显然,许多垃圾邮件扫描程序会扫描电子邮件,并会按照电子邮件中的任何链接扫描其内容中的恶意软件。到目前为止我使用的解决方法:

  • 如果“取消订阅”页面是通过 HTTP GET 请求的,它会呈现一个简单的确认表单和一些在页面加载时提交表单的 JS
  • 如果“取消订阅”页面是通过 HTTP POST 请求的,那么我们取消订阅用户

这样,用户通常只需要单击表单,他们就会收到“您已取消订阅”的消息。如果他们禁用了 JS,他们仍然可以手动提交确认表。

现在的问题是,像Office365的ATP这样的扫描器会打开页面,并在其中执行JS。通过执行 JS,他们提交表单并导致用户自动取消订阅。

我已经考虑向自动提交 JS 逻辑添加检查:

  • 不要为特定的用户代理自动提交
  • 不要自动提交特定的客户端 IP 范围
  • 触发鼠标移动事件的自动提交

但这些似乎都是脆弱的方法,充其量是黑客攻击,随着电子邮件扫描仪改变他们的策略,这些方法必然会被破坏。

我相信这个问题在我之前有很多人。除了放弃单击功能之外,是否有已知的合理解决方法?

附注。我已经添加了对RFC 8058 的支持,但用户仍然会点击页脚中的链接。

email spam unsubscribe office365

13
推荐指数
1
解决办法
1046
查看次数

在做TDD时你如何保持纪律?

当我对即将实现的新功能或者我刚刚"理解"的错误感到兴奋时,就会有冲动进入代码并进行黑客攻击.需要一些努力来阻止自己这样做并首先编写相应的测试.后来测试经常变成琐碎的4线,但在写之前仍有脑袋后面的想法,"也许我可以跳过这一次,这一次?" 理想情况下,我想要一个写测试的冲动,只有这样,也许,代码:)

您使用什么方法(或思维或思维方式或自我奖励政策或其他方式)来帮助维持纪律?或者你只是练习它直到感觉自然?

tdd methodology unit-testing

11
推荐指数
1
解决办法
466
查看次数

MenuItem.SHOW_AS_ACTION_IF_ROOM如何工作?

ActionBar入门......

对于MenuItem.SHOW_AS_ACTION_IF_ROOM文档说:

如果系统确定有空间,则将此项目显示为操作栏中的按钮.

我的问题是,系统如何确定是否有空间,我可以影响/调整该决定吗?

在我的情况下,我有一些菜单项适合显示为动作按钮 - 如果有足够的空间.在较小的屏幕上,它们占用足够的空间来使动作栏的标题变得非常灵活.在这种情况下,我宁愿他们采取行动溢出,而不是模糊标题.

PS.我正在使用ActionBarSherlock并且没有检查本机ActionBar是否完全相同.如果原生ActionBar不允许"if-room"操作项过度缩小标题,那么很酷,我会去寻找ActionBarSherlock中的错误.

android android-actionbar

9
推荐指数
2
解决办法
3829
查看次数

在Android上提高OpenGL ES填充率的提示

在我的动态壁纸中,我正在绘制3个纹理四边形,覆盖整个屏幕.在Nexus One上我得到40fps.我正在寻找提高性能的方法.

四边形相互混合,纹理从RGB_8888位图加载.纹理是1024x1024.

我有

glDisable(GL_DITHER);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glDisable(GL10.GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

我尝试过的东西,都产生了相同的40fps:

  • 将纹理大小减小到512x512和256x256
  • 使用draw_texture扩展名
  • 禁用混合
  • 将纹理过滤从GL_LINEAR更改为GL_NEAREST
  • 使用VBO(绝望的尝试,因为只有3个四边形...)
  • 在独立活动中运行绘图代码(如果是动态壁纸以某种方式影响性能)

如果我绘制2层而不是3层,fps上升到45左右,然后只绘制1层,看到fps上升到55.我想我受到填充率的限制,因为关闭和可能代价高昂的功能会导致相同的fps,似乎唯一能改善fps的东西就是减少...

我正在考虑纹理压缩的想法,但支持不同的压缩格式似乎并不好玩.ETC1没有我需要的alpha通道,我不确定PVRTC和ATITC是否可以从Java和OpenGL ES 1.0或1.1中使用.

我很高兴听到关于还有什么可以尝试的想法.我可以指示当前版本的壁纸和屏幕截图(如果有用).

performance android textures opengl-es

8
推荐指数
1
解决办法
8874
查看次数

调查python进程,看看有什么吃CPU

我有一个python进程(Pylons webapp),它不断使用10-30%的CPU.我将改进/调整日志记录以获得对正在发生的事情的一些了解,但在那之前,是否有任何工具/技术可以让我们看到python进程正在做什么,有多少以及它有多忙线程等等?

更新:

  • 配置访问日志,显示没有请求,webapp只是空闲
  • 没有必要在中间件链中插入paste.profile,因为没有请求,活动必须发生在webapp的工作线程或贴纸Web服务器中
  • 像这样运行贴纸:"python -m cProfile -o outfile/usr/bin/paster serve dev.ini"并且检查结果显示大部分时间花在"posix.waitpid"上.Paster在子进程中运行webapp,分析器不会获取子进程活动
  • 调查;黑客攻击PasteScript"服务"命令,以便子进程得到分析

另一个更新:

经过多次修改,在各个地方坚持使用探查器并熟悉PasteScript内部,我发现如果应用程序在没有"--reload"参数的情况下启动,则常量CPU负载会消失(如果代码发生变化,此标志会告诉paster重新启动,方便使用开发),生产环境很好.

python debugging pylons monitoring multithreading

6
推荐指数
2
解决办法
2882
查看次数