标签: android-bitmap

将图像视图定位为相机预览上的叠加图像

您好我在使用Android Camera API编写相机应用程序!

它具有以下功能:

  • 该应用程序具有相机预览的图像视图
  • 用户可以将该图像视图拖放到相机预览上
  • drop事件捕获图像视图放置的位置
  • 用户捕获图像,并且在用户期望的拖动然后丢弃的位置上的照片上添加图像视图

以下是用于拖放图像视图的代码:

@Override
public boolean onTouch(View view, MotionEvent event) {
    final int X = (int) event.getRawX();
    final int Y = (int) event.getRawY();
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
            _xDelta = X - lParams.leftMargin;
            _yDelta = Y - lParams.topMargin;
            break;
        case MotionEvent.ACTION_UP:
            xloc=X;
            yloc=Y;
            Toast.makeText(getContext(), "Location==="+Integer.toString(xloc)+"==="+Integer.toString(yloc), Toast.LENGTH_SHORT).show();
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
                    .getLayoutParams();
            layoutParams.leftMargin = X - _xDelta;
            layoutParams.topMargin …
Run Code Online (Sandbox Code Playgroud)

android overlay imageview android-camera android-bitmap

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

使用Android P的ImageDecoder有什么用处和优点?

背景

Android P使用ImageDecoder类提供了一个用于加载图像的新API .

问题

并非被记录关于这个类,所以我只是好奇它的用法,我是否应该考虑尽可能使用它,而不是滑行库,例如,其中谷歌本身建议使用:

对于大多数情况,我们建议您使用Glide库来获取,解码和显示应用中的位图.Glide在处理与在Android上使用位图和其他图像相关的这些和其他任务时,大部分复杂性都是抽象的.有关使用和下载Glide的信息,请访问GitHub上的Glide存储库.

我发现了什么

我发现了一些关于它的文章,提供了它可以做什么以及如何使用它的线索:

但是,根据我的测试,与Movie类相比,加载GIF动画更糟糕的是使用此API(占用更多内存,使用大约相同的CPU),而Movie类本身比第三方库(如android-gif-drawable)更糟糕.我测试的是一个相当长的GIF动画.在第三方库上花了大约59MB.使用Movie类需要大约168MB,使用新的ImageDecoder API需要200-300MB ...

简而言之,我发现这个API的原因是:

  1. 它应该取代BitmapFactory
  2. 它支持加载动画GIF/WEBP
  3. 它有一些用于前/后处理的监听器
  4. 它应该更高效,但我没有看到它,至少在内存使用方面没有.

问题

  1. 使用此API有什么优势,而不是我们在第三方库中已有的优势?含义为静态图像滑动,为GIF设置"android-gif-drawable"(对于我没有搜索的WEBP,可能是什么东西)?

  2. 它是否在幕后表现更好,我不应该关心它的内存使用情况?

  3. 它有内存/磁盘缓存吗?如果是这样,那么它如何管理其内存缓存,因为Android不会在堆内存中存储Bitmaps(在此处写到)?

  4. 该API是否可以在支持库中使用?否则我根本不需要使用它...编辑:似乎它可能在支持库上.链接在这里.

android animated-gif android-bitmap imagedecoder android-9.0-pie

10
推荐指数
0
解决办法
1539
查看次数

在Android上重复使用不同屏幕尺寸和密度的可绘制图像

背景: 我正在为平板电脑(风景)开发一个Android应用程序,其图像资源的分辨率为1920x1200.该分辨率适合以下屏幕尺寸和密度:

drawable-xlarge-hdpi
drawable-large-xhdpi
Run Code Online (Sandbox Code Playgroud)

问题: 如果我在这两个文件夹中包含所有重复的图像资源,则APK的最终大小将不必要地大

我的方法不成功: 我尝试使用Alias来实现此处定义的drawable:http: //developer.android.com/guide/topics/resources/providing-resources.html#AliasResources

我有我的图像资源:

res/drawable-nodpi/image_cmn.png
Run Code Online (Sandbox Code Playgroud)

和相应屏幕大小和密度文件夹中的两个别名:

res/drawable-xlarge-hdpi/image.xml
res/drawable-large-xhdpi/image.xml
Run Code Online (Sandbox Code Playgroud)

image.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/image_cmn" />
Run Code Online (Sandbox Code Playgroud)

当然,当我在布局文件中使用我的图像时,我引用了别名:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/image" />
Run Code Online (Sandbox Code Playgroud)

但遗憾的是Android没有正确调整我的测试平板电脑(mdpi)的资源,结果是我有更大的图像.

我试图将原始的png移动到res/drawable甚至res/raw但是结果与res/drawable-nodpi相同.

如果我将此png移动到res/drawable-xlarge-hdpi(与xml别名相同),结果是正确的但自然不能解决我的问题因为我也必须将它们复制到res/drawable-large-xhdpi和apk大小增加.

有谁知道如何实现这一目标?

android alias xml-drawable android-drawable android-bitmap

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

BitmapDrawable构造函数中的"资源"到底是什么?

由于BitmapDrawable不推荐使用无参数构造函数,我们必须为构造函数提供资源ID.

BitmapDrawable bitmapDrawable = new BitmapDrawable(res, bmap);
Run Code Online (Sandbox Code Playgroud)

res一般在哪里getResources().

为什么构造函数需要它,如果我们使用通用图像缓存,我们如何定义该值?

android android-resources android-drawable bitmapdrawable android-bitmap

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

Android模糊视图(视图背后的模糊背景)

我试图让图像的底部部分为顶部的视图,就像在图像中一样.

我尝试使用Rendenscript模糊它,但我无法模糊视图背后的部分.:(

我见过很多库,但几乎所有库都模糊了整个图像,但不是它的一部分.

另外,一个重要的部分是我在ViewPager中使用它,因此在IOS中需要像这样快速和动态的东西,它在它背后的图像改变时重绘自己.

任何帮助表示赞赏.谢谢你的到来!

我的xml:

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

    <ImageView
        android:id="@+id/image"
        android:src="@drawable/broadstairs"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:layout_centerInParent="true"/>

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:text="Hello World"
        android:gravity="center"
        android:layout_alignParentBottom="true"
        android:textColor="@android:color/white"
        android:textStyle="bold"
        android:textSize="36sp"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我的代码:

BlurBuilder.java

public class BlurBuilder {
    private static final float BITMAP_SCALE = 0.1f;
    private static final float BLUR_RADIUS = 7.5f;

    public static Bitmap blur(Context context, Bitmap image) {
        int width = Math.round(image.getWidth() * BITMAP_SCALE);
        int height = Math.round(image.getHeight() * …
Run Code Online (Sandbox Code Playgroud)

android blur blurry android-image android-bitmap

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

如何更改Android评级栏明星?

我试图通过创建新风格来改变我的评级栏中的星星,这就是我所做的:

<style name="RatingBarSmall" parent="android:Widget.DeviceDefault.Light.RatingBar.Indicator">
        <item name="android:progressDrawable">@drawable/rating_bar</item>
        <item name="android:minHeight">36dp</item>
        <item name="android:maxHeight">36dp</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

绘制/ rating_bar:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@android:id/background"
        android:drawable="@drawable/rating_star_empty" />
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/rating_star_empty" />
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/rating_star_filled" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)

评级栏xml视图:

<RatingBar
                    android:id="@+id/ratingBar"
                    style="@style/RatingBarSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="0"
                    android:isIndicator="true"
                    android:rating="5" />
Run Code Online (Sandbox Code Playgroud)

这是两个图像:

rating_star_empty rating_star_filled

但我不知道为什么我在星空下有垂直线,你可以在下面的图片中看到: 在此输入图像描述

编辑:已解决:我只是将评级栏高度设置为图像高度.

谢谢

layout android android-layout ratingbar android-bitmap

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

将内存中的位图数据绑定到ImageView

我有一个位图内存(通过专有的TCP/IP协议栈从服务器应用程序下载),我想绑定到ImageView.我可以使用setImageBitmap手动绑定图像; 如果我使用数据绑定库绑定其他控件,则不会显示图像.如何使用数据绑定库绑定到包含Bitmap对象的属性?

android android-bitmap android-databinding

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

如何在没有内存耗尽的情况下在机器人中制作拼图应用程序?

我注意到来自谷歌游戏商店的其他拼图应用程序可以达到多达400个单独的可移动拼图

我一直试图学习如何至少拍摄一个代表我的谜题的图像,裁剪某些部分并遮盖留下拼图设计的图像空间,以便创建我个人的拼图

我想为我的应用程序最多20件,但到目前为止,根据我的android工作室内存日志,一旦位图工厂完成创建一个拼图块我用尽了大约18mb的内存,之后创建了20件与所有其他应用程序的功能我正在使用400 + mb的内存,我必须使用"largeHeap = true"以防止内存耗尽,但我已经接近超出应用程序超级缓慢且足够的限制动画活动将不可避免地导致应用程序崩溃

我很想知道那些其他游戏商店拼图应用程序正在做什么,我不是

非常感谢任何输入

仅供我使用PNG24作为我的图像,测试图像的尺寸为556x720

这是一个例子,如果我只是创建一个动画能力拼图图像

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);//Remove title bar
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//Hides notification bar
    this.setContentView(R.layout.activity_main);//set content view AFTER ABOVE sequence (to avoid crash)

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    mainDisplay = getWindowManager().getDefaultDisplay();
    mainLayout = (ViewGroup) findViewById(R.id.id_layout);

    DisplayMetrics m = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(m);
    int windowHeight = m.heightPixels;
    int windowWidth = m.widthPixels;

    offsetX = (windowWidth / 1440.0f);
    offsetY = (windowHeight / 2560.0f);

    ourContext = this;

    xpos = new float[2];
    ypos = new float[2];

    iv_PuzzleOne();

    bkgdbm = …
Run Code Online (Sandbox Code Playgroud)

puzzle android crop porter-duff android-bitmap

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

BitmapFactory.decodeResource和莫名其妙的内存不足

我得到一个奇怪的Out of Memory错误解码一个可绘制的图像资源960x926px jpg,分配3555856字节.图像仅放在drawable-xxhdpi(3x)中,我使用的是hdpi(1.5x)设备.两个问题:

  • 为什么我在堆中有足够的可用内存时会收到错误?

  • 为hdpi设备分配应该是((960/2)x(926/2))x 4 = 888960字节(不是3555856)?

有人可以解释一下吗?

注意:问题是为什么在拥有22.5MB可用内存时获得3.5MB的OOM分配(参见日志)

03-18 17:30:15.050 32750-32750 /?D/dalvikvm:GC_FOR_ALLOC释放10809K,49%免费23735K/46087K,暂停89ms,总计89ms

03-18 17:30:15.050 32750-32750 /?I/dalvikvm-heap:强制收集3555856字节分配的SoftReferences

03-18 17:30:15.160 32750-32750 /?D/dalvikvm:GC_BEFORE_OOM释放29K, 49%免费23705K/46087K,暂停103ms,总计103ms

03-18 17:30:15.160 32750-32750 /?E/dalvikvm-heap:3555856字节分配的内存不足.

03-18 17:30:15.160 32750-32750 /?I/dalvikvm:"main"prio = 5 tid = 1 RUNNABLE

03-18 17:30:15.160 32750-32750 /?我/ dalvikvm:| group ="main"sCount = 0 dsCount = 0 obj = 0x418fc6a0 self = 0x4010c008

03-18 17:30:15.160 32750-32750 /?我/ dalvikvm:| sysTid = 32750 nice = 1 sched = 0/0 cgrp = apps handle = 1075251280

03-18 …

android android-image bitmapfactory android-memory android-bitmap

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

在Android中使用canvas和bitmap,如何获取此图像?

我是android新手.我想画这个图像(匹配统计) 在此输入图像描述并用10%到100%的颜色填充图像.我试了这么多,这是图像在此输入图像描述

这是代码

public class DrawView extends View {
Paint paint = new Paint();

public DrawView(Context context) {
    super(context);
}

@Override
public void onDraw(Canvas canvas) {
    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(3);
    canvas.drawRect(30, 30, 100, 100, paint);
    paint.setStrokeWidth(0);
    paint.setColor(Color.GRAY);
    canvas.drawRect(33, 60, 97, 97, paint);
    paint.setColor(Color.WHITE);
    canvas.drawRect(33, 33, 97, 60, paint);

}
Run Code Online (Sandbox Code Playgroud)

任何建议对我都有帮助.提前致谢.

android android-custom-view android-canvas android-bitmap

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