我正在试图弄清楚如何制作与Google加时间轴视图相似的布局.在时间轴上滚动时有一个动画,我真的很喜欢它.知道怎么做吗?

在我看来android有一个包含Renderscript支持的android.support.v8包.问题是,这似乎没有在任何地方记录 - 支持库文档没有说任何关于v8包,只有v4和v13.
API级别8及以上的所有设备是否支持该软件包,是否可以安全地用于生产?
之前已经提出了一个稍微不同的问题,但我想知道Android开发人员认为谷歌的决定背后的真正含义,而不是谷歌官方的答案.
OpenCL是一种开放标准,适用于各种设备,如CPU,台式机GPU,ARM处理器,FPGA和DSP.它为我们的开发人员提供了创建高性能软件和库的便利,这些软件和库适用于所有设备.
RenderScript是一种更高级的语言,主要侧重于媒体操作,并在CPU和GPU上运行.它适用于所有新的Android手机和平板电脑,但不适用于其他操作系统.与OpenCL的一个重大区别是RenderScript总是处理调度,而不是软件.
谷歌的官方回答在OpenCL上实际上是不正确的,这使OpenCL社区中的许多人感到沮丧,并在逻辑上做出了一些重大反应.因此,请务必关注RenderScript和OpenCL - 我不希望这个问题被关闭,因为无意中被告知.
我有几个基本算法(DCT/IDCT和其他一些)在Nexus 10上移植和工作(正如预期的至少功能).由于这些算法是第一个实现,它们的执行时间当前运行到秒,这是可以理解的.
但是,考虑到Renderscript的体系结构,我发现这些算法可以在CPU或GPU上运行,具体取决于其他并行应用程序活动.例如,在我的应用程序中,有一个用于图像的滚动视图和该视图上的任何活动,实质上是将renderscript执行推送到CPU.如果没有活动,算法将在GPU上运行.我通过ARM-DS5 Mali/A15跟踪看到这个.
这种情况表现为调试/调整噩梦,因为算法在CPU(双核)与GPU(Mali)上运行时的性能增量大约为2秒,这使得很难衡量我的性能改进做我的算法代码.
有办法解决这个问题吗?一种可能的解决方案是至少有一个调试可配置选项来为renderscript代码选择目标类型(ARM,GPU)?
我使用模糊效果,同时应用从资源加载的位图,它按预期工作,而使用通用图像加载器下载图像并应用于位图它导致A/libc:致命信号7(SIGBUS),代码2,故障地址0x9d56e000在tid 31955(AsyncTask#1)
public class MyActivity extends ActionBarActivity {
private ImageView ivBackground;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
ivBackground = (ImageView) findViewById(R.id.iv_background);
String imageUri = "https://upload.wikimedia.org/wikipedia/commons/c/c2/Macau-bus-1032.jpg";
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(this));
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(Color.TRANSPARENT)
.showImageOnFail(Color.TRANSPARENT)
.resetViewBeforeLoading(true)
.cacheOnDisk(true)
.cacheInMemory(false)
.bitmapConfig(Bitmap.Config.RGB_565)
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();
imageLoader.displayImage(imageUri, ivBackground, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(final String imageUri, View view, final Bitmap loadedImage) {
Bitmap bmpTest = BitmapFactory.decodeResource(getResources(), R.drawable.test);
//final Bitmap cropedBitmap = Bitmap.createBitmap(bmpTest, 0, 0, bmpTest.getWidth() / 2, …Run Code Online (Sandbox Code Playgroud) 到目前为止我尝试过的:
将每个帧转换为位图,使用库将其模糊并将其放入ImageView相机预览前面.显然太慢了 - 比如1 fps.
然后我开始使用RenderScript,它会模糊每一帧,处理结果应放在TextureView封面相机预览中.
该方法的基本代码和平:
使用BlurFilter
ScriptIntrinsicBlur.create(rs, Element.RGBA_8888(rs)).apply {
setRadius(BLUR_RADIUS)
}
private val yuvToRgb = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(rs))
private var surface: SurfaceTexture? = null
private fun setupSurface() {
if (surface != null) {
aBlurOut?.surface = Surface(surface)
}
}
fun reset(width: Int, height: Int) {
aBlurOut?.destroy()
this.width = width
this.height = height
val tbConvIn = Type.Builder(rs, Element.U8(rs))
.setX(width)
.setY(height)
.setYuvFormat(android.graphics.ImageFormat.NV21)
aConvIn = Allocation.createTyped(rs, tbConvIn.create(), Allocation.USAGE_SCRIPT)
val tbConvOut = Type.Builder(rs, Element.RGBA_8888(rs)) …Run Code Online (Sandbox Code Playgroud) 我最近一直在使用RenderScript,目的是创建一个程序员可以轻松使用的API,类似于Microsoft Accelerator的工作方式.
我现在遇到的麻烦是因为我想要在RenderScript层中传递值并让所有内容以最有效的方式运行,这是我的源代码的摘录到目前为止:
int[] A = new int[10];
int[] B = new int[10];
for (int i = 0; i < 10; i++) {
A[i] = 2;
B[i] = i;
}
intAdd(A, B);
Run Code Online (Sandbox Code Playgroud)
这只是创建两个基本数组并用值填充它们并调用将它们发送到RenderScript的函数.
private void intAdd(int[] A, int[] B) {
RenderScript rs = RenderScript.create(this);
ScriptC_rsintadd intaddscript = new ScriptC_rsintadd(rs, getResources(), R.raw.rsintadd);
mScript = intaddscript;
for(int i = 0; i < A.length; i++) {
setNewValues(mScript, A[i], B[i]);
intaddscript.invoke_intAdd();
int C = getResult(mScript);
notifyUser.append(" " + C);
}
}
public void setNewValues(Script …Run Code Online (Sandbox Code Playgroud) 我似乎无法找到何时使用的明确答案RenderScript?
文档说我们应该在进行一些计算或使用图像时使用它.这不是特别清楚,特别是有图像的部分.
有人可以给我一些实用的建议吗?
例如,
他们在谈论什么计算机?
什么时候我们应该在有其他方法(或工厂)时使用RenderScript处理Bitmap,我们可以在这种场合成功使用?
被RenderScript编码游戏时仅限于使用情况?
我有byte[] yuvByteArray(540x360图像从Camera.PreviewCallback.onPreviewFrame方法中捕获并转储到assets/yuv.bin文件中).我想转换byte[] yuv为byte[] rgba数组,使用以下代码(基于LivePreview android示例).
但是我收到outBytes了在forEach之后填充零的rgba数组并将out分配复制到outBytes.我的代码出了什么问题?
package hellorender;
import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v8.renderscript.Allocation;
import android.support.v8.renderscript.Element;
import android.support.v8.renderscript.RenderScript;
import android.support.v8.renderscript.ScriptIntrinsicYuvToRGB;
import android.support.v8.renderscript.Type;
import android.widget.ImageView;
import hellorender.R;
import java.io.IOException;
import java.io.InputStream;
public class HelloRenderActivity extends Activity {
public static final int W = 540;
public static final int H = 360;
private RenderScript rs;
private ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic;
@Override
protected void onCreate(Bundle savedInstanceState) { …
Run Code Online (Sandbox Code Playgroud) 当我做ProGuard时,我使用Blurry它给了我:
Error loading RS jni library: java.lang.UnsatisfiedLinkError:
android.support.v8.renderscript.l: Error loading RS jni library: java.lang.UnsatisfiedLinkError: JNI_ERR returned from JNI_OnLoad in "/data/app/com.app.app-2/lib/arm/librsjni.so"
at android.support.v8.renderscript.RenderScript.a(SourceFile:1347)
at android.support.v8.renderscript.RenderScript.b(SourceFile:1504)
at android.support.v8.renderscript.RenderScript.a(SourceFile:2454)
at jp.wasabeef.blurry.internal.Blur.rs(SourceFile:62)
at jp.wasabeef.blurry.internal.BlurTask$1.run(SourceFile:61)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud) renderscript ×10
android ×9
bitmap ×1
blur ×1
blurry ×1
camera ×1
java ×1
opencl ×1
performance ×1
proguard ×1