小编use*_*661的帖子

WallpaperService图像绘制性能

我正在为Android的livewallpaper工作.代码有效,但我遇到了性能问题.基本上我正在绘制位图并移动它们.有15个小图像,它工作得很好.但是有50个更大的图像,它开始滞后.

在我的移动对象中,我在构造函数中创建了Bitmap并将其显示如下:

public void drawFrame(Canvas canvas) {
    Position p = movingStrategy.move();
    Matrix matrix = new Matrix();
    matrix.postScale(scale, scale);
    matrix.postRotate(p.getRotation());
    matrix.postTranslate(p.getPositionX(), p.getPositionY());
    canvas.drawBitmap(bitmap, matrix, paint);
}
Run Code Online (Sandbox Code Playgroud)

在我的wallpaperservice中,我正在调用onDraw:

 private void draw() {
        handler.removeCallbacks(drawRunner);
        SurfaceHolder holder = getSurfaceHolder();
        Canvas canvas = null;
        try {
            canvas = holder.lockCanvas();
            if (canvas != null) {
                canvas.save();
                canvas.drawColor(Color.BLACK);
                for (DrawElement element : elements) {
                    element.drawFrame(canvas);
                }
                canvas.restore();
            }
        } finally {
            if (canvas != null)
                holder.unlockCanvasAndPost(canvas);
        }
        if (visible) {
            handler.postDelayed(drawRunner, 1);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我尝试使用普通的View和它的onDraw,它在那里工作正常.它很顺利.现在我问自己如何改善性能.我也尝试了不同的delayMillis,但性能并没有增加.

我也听说过GLWallpaperService,但是绘制简单的Bitmaps似乎很复杂.所以我想改用Canvas.

谢谢 …

android live-wallpaper android-canvas

5
推荐指数
1
解决办法
153
查看次数

安卓 | 有意图地给出图像

我想将我的图像从一个活动传递到另一个活动。起初,我尝试使用图像的 base64 字符串来执行此操作。但这仅适用于小图片。它适用于 400 kb,但不适用于 600 kb。有一个更好的方法吗?顺便说一句,我没有在本地保存图像,我从服务器获取图像,所以我没有真正的Drawable。

android drawable android-intent android-activity

3
推荐指数
1
解决办法
7717
查看次数

MongoDB Aggregation Project检查数组是否包含

我有以下文件:

{
    _id : 21353456,
    username : "xy",
    text : "asdf",
    comments : [
        {
            username : "User1",
            text : "hi",
        },
        {
            username : "User2",
            text : "hi1",
        },
        {
            username : "User3",
            text : "hi2",
        },
        {
            username : "User4",
            text : "hi3",
        }

    ]
}
Run Code Online (Sandbox Code Playgroud)

现在,我想获取带有聚合和项目的用户名,文本和注释。另外,如果comments数组包含带有“ User1”的用户名,我也想使用布尔值。我有这个,但是不起作用。

db.posttest.aggregate(
   [
     {
       $project:
          {
            username: 1,
            text: 1,
            comments : 1,
            hasComment: { $eq: [ "comments.$.username", "User1" ] },
            _id: 0
          }
     }
   ]
)
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-query aggregation-framework

3
推荐指数
1
解决办法
4065
查看次数

LinearLayout无法转换为CoordinatorLayout

我有个问题.我想以编程方式设置margin params,但它不起作用.我有这个xml样式表:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">


</android.support.design.widget.AppBarLayout>


<ImageView
    android:layout_width="1440px"
    android:layout_height="1000px"
    android:id="@+id/post_view_photo"
    android:transitionName="@string/transition_image"/>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical|start"
    android:layout_margin="@dimen/fab_margin"
    app:layout_anchor="@+id/post_view_photo"
    android:src="@android:drawable/stat_notify_chat"
    app:layout_anchorGravity="bottom|end" />
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_anchor="@+id/post_view_photo"
    app:layout_anchorGravity="bottom|start">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text_bar"
        android:background="@color/colorPrimary">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/username_text"
            android:layout_gravity="center_vertical|start"
            app:layout_anchor="@+id/post_view_photo"
            app:layout_anchorGravity="bottom|start"
            android:textSize="25dp"
            android:transitionName="@string/transition_username"/>
    </LinearLayout>
</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginTop="808px"
    android:id="@+id/view_bottom_layout">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:id="@+id/post_user_image"
                android:src="@drawable/back"
                android:paddingTop="10px"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/post_view_maintext"/>
        </LinearLayout>

    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="#414141"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我想以编程方式设置边距.但我得到这个错误:

java.lang.ClassCastException: android.support.design.widget.CoordinatorLayout$LayoutParams cannot be …
Run Code Online (Sandbox Code Playgroud)

xml android android-linearlayout android-activity

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

如果不存在,MongoDB会向数组添加值

我有这个系列:

{
username : "user1",
arr : [
    {
        name : "test1",
        times : 0
    },
    {
        name : "test2",
        times : 5
    }
]
}
Run Code Online (Sandbox Code Playgroud)

我有一个带有一些对象的数组.此对象具有名称和值时间.现在我想添加新对象,如果我的数组不包含它们.例:

我在集合中已经有两个名为"test1"和"test2"的对象.我现在想要插入对象"test2","test3"和"test4".它应该只将对象"test3"和"test4"添加到数组而不是"test2".在这种情况下,值times不会执行任何操作,它们在插入时应该只有值0.

有没有办法用一个查询来做到这一点?

arrays collections mongodb

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

想要为 RunOnUIThread 使用 Context 而不是 Activity

我正在创建一个 Android 应用程序,为我的 RecyclerView 创建一个 ListAdapter。我想在不同的活动中使用它。但是当我尝试使用((Activity)context)我的应用程序执行此操作时,它会崩溃。然后我用一个处理程序和 runnable 尝试了它,但是我的布局搞砸了。这样做switch(ActivityName)不是一个好方法,是吗?还有什么我可以做的吗?你有答案吗?

谢谢!

java multithreading android android-activity

-2
推荐指数
1
解决办法
936
查看次数