是否有合理的方式与毕加索做圆角
大多数关于圆角的毕加索建议都建议使用转换,但我没有看到一个例子,它不会在转换过程中创建额外的位图.
这似乎是因为Picasso只使用位图,而使用圆角的技巧使用了这样一个事实:你可以合理有效地动态绘制圆角(大多数解决方案使用类似于http://www.curious-creature的内容. org/2012/12/11/android-recipe-1-image-with-rounded-corners /).
通过将ImageView的类型更改为采用自定义drawable的东西,可以将Volley的类型更改为圆形角落.由于Picasso需要位图(至少,只有位图 - >位图转换),所以这是不对的,因为drawable转换为位图会在过程中创建一个位图.
一个解决方案就是在我自己的分支中修改毕加索的工作,它添加了一个位图 - >可绘制的变换,但我想有更好的方法来解决这个问题.
我不想在视图顶部绘制9个补丁以给出圆角的外观.
我最近一直在玩毕加索作为图像加载器库.我和Dagger以及OkHtttp一起使用它.
我对这个库的唯一问题是上下文的使用以及通过构建器实现库的实例化.
我不完全确定所需的上下文是什么(无法找到有关它的文档)以及我们应该使用哪个上下文(ApplicationContext或ActivityContext?)以及原因.
通过Jake Wharton查看示例(顺便说一下这个组合所有这些的优秀示例应用程序)u2020,只有一个Picasso实例,它是在应用程序上下文的基础上创建的.像这样的东西:
@Provides
@Singleton
Picasso providePicasso(@ApplicationContext Context context, OkHttpClient client) {
Picasso picasso = new Picasso.Builder(context)
.downloader(new OkHttpDownloader(client))
.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception e) {
Log.e("Picasso", "Failed to load image:" + uri);
}
})
.build();
return picasso;
}
Run Code Online (Sandbox Code Playgroud)
这用作全局对象,仅实例化一次.我的问题是为什么不在Activity级别实例化一个新的picasso实例(使用相同的全局OkHttpClient配置LRUCache并且之前注入它)并将活动作为上下文传递?我今天早上在一个Github Picasso帖子中读到应该使用应用程序上下文但没有提供更多细节.
所以作为结论,我的问题是: - 我们应该使用的上下文是什么,应该使用哪一个. - 为什么使用全局对象而不是活动级别实例.
谢谢!
我试图通过Android编码清除Picasso的缓存.
任何人都可以帮我解决这个问题..?
我尝试使用以下代码,但这在我的情况下没用:
Picasso.with(getActivity()).load(data.get(pos).getFeed_thumb_image()).skipMemoryCache().into(image);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Glide逐步浏览视频文件中的帧(而不会遇到关键帧寻求Android遭受的问题).我可以通过以下方式在毕加索做到这一点:
picasso = new Picasso.Builder(MainActivity.this).addRequestHandler(new PicassoVideoFrameRequestHandler()).build();
picasso.load("videoframe://" + Environment.getExternalStorageDirectory().toString() +
"/source.mp4#" + frameNumber)
.placeholder(drawable)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
(frameNumber只是一个int,每次增加50000微秒).我也有像这样的PicassoVideoFrameRequestHandler:
public class PicassoVideoFrameRequestHandler extends RequestHandler {
public static final String SCHEME = "videoframe";
@Override public boolean canHandleRequest(Request data) {
return SCHEME.equals(data.uri.getScheme());
}
@Override
public Result load(Request data, int networkPolicy) throws IOException {
FFmpegMediaMetadataRetriever mediaMetadataRetriever = new FFmpegMediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(data.uri.getPath());
String offsetString = data.uri.getFragment();
long offset = Long.parseLong(offsetString);
Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(offset, FFmpegMediaMetadataRetriever.OPTION_CLOSEST);
return new Result(bitmap, Picasso.LoadedFrom.DISK);
}
}
Run Code Online (Sandbox Code Playgroud)
我想改用Glide,因为它可以更好地处理内存.有没有办法在Glide中使用此功能?
或者,实际上,从视频中创建一组帧的任何其他方式,我可以单步执行!
谢谢!
我想保留imageView的纵横比,并调整它以尽可能大地填充/调整,而不会使用Picasso扭曲/改变它的纵横比.
到目前为止,我发现了这个:
建议使用:
.fit().centerInside()
Run Code Online (Sandbox Code Playgroud)
但是当我尝试时:
Picasso.with(this).load(boxart)
.fit().centerInside()
.into(imageItem);
Run Code Online (Sandbox Code Playgroud)
和我的XML一起:
<RelativeLayout
android:id="@+id/rl_ListView1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:layout_gravity="left"
android:layout_weight="0.3" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:scaleType="fitXY"
android:layout_gravity="left" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
然而,图像仍然显得扭曲(它看起来太长而且很瘦 - 它的原始宽高比是扭曲的)我不确定为什么.

我试图在ma app中集成进度条.但我无法跟踪回调方法.进度条总是显示如何隐藏图像被锁定时?
holder.imageView = (ImageView) localView.findViewById(R.id.imageView1);
holder.progressBar = (ProgressBar) localView.findViewWithTag(R.id.progressBar1);
localView.setTag(holder);
url = getItem(paramInt);
Picasso.with(getApplicationContext())
.load(url)
.placeholder(R.drawable.ic_launcher)
.error(R.drawable.ic_launcher)
.fit()
.into(holder.imageView, new Callback() {
@Override
public void onSuccess() {
holder.imageView.setVisibility(View.VISIBLE);
holder.progressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onError() {
holder.progressBar.setVisibility(View.VISIBLE);
holder.imageView.setVisibility(View.INVISIBLE);
}
});
Run Code Online (Sandbox Code Playgroud) 我有一些带有白色背景的图像和一些带有透明背景的图像.当创建它们的圆形图像时,我希望它们都具有白色背景,所以基本上我想用白色像素替换图像的透明像素.
有没有办法实现这一点,而不是逐个替换像素?这是我用于创建圆角图像的转换:
package com.mobilefootie.util;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
public class RoundedTransformation implements com.squareup.picasso.Transformation {
public RoundedTransformation() {
}
@Override
public Bitmap transform(final Bitmap source) {
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
if (squaredBitmap != source) {
source.recycle();
}
Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());
Canvas …Run Code Online (Sandbox Code Playgroud) 我一直在调查Picaso,Android的图像下载和缓存库.我发现他们的缓存机制基于Android HttpResponseCache.文件说:
为了测量缓存有效性,该类跟踪三个统计信息:
- 请求计数:自创建此缓存以来发出的HTTP请求数.
- 网络计数:需要网络使用的请求数.
- 命中计数:缓存提供响应的请求数.
那么Android Http缓存究竟是如何工作的呢?
无法找到在占位符中加载gif图像的完美解决方案
Glide
.with(context)
.load("imageUrl")
.asGif()
.placeholder(R.drawable.gifImage)
.crossFade()
.into(imageView)
Run Code Online (Sandbox Code Playgroud)
尝试了Glide版本3.7.0的asGif()属性.但没有运气!
所以我正在尝试将新的Firebase应用程序内消息传递功能实现到我的Android应用程序中.但出于任何原因,应用程序崩溃的那一刻我将库添加到我的gradle中.
这是我的傻瓜:
implementation 'com.google.firebase:firebase-inappmessaging-display:17.0.0'
implementation 'com.squareup.picasso:picasso:2.71828'
Run Code Online (Sandbox Code Playgroud)
我在这里给了poicasso因为在崩溃日志中我得到了与毕加索有关的错误
这是日志文件:
08-19 18:10:08.482 26606-26606/com.kirtu.simpletexts.texts.debug E/CrashlyticsCore: Failed to execute task.
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask.get(FutureTask.java:177)
at com.crashlytics.android.core.CrashlyticsBackgroundWorker.submitAndWait(CrashlyticsBackgroundWorker.java:41)
at com.crashlytics.android.core.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:320)
at com.crashlytics.android.core.CrashlyticsController$6.onUncaughtException(CrashlyticsController.java:300)
at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:42)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)
08-19 18:10:08.484 26606-26606/com.kirtu.simpletexts.texts.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kirtu.simpletexts.texts.debug, PID: 26606
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/squareup/picasso/OkHttpDownloader;
at com.google.firebase.inappmessaging.display.internal.b.b.zzr.get(com.google.firebase:firebase-inappmessaging-display@@17.0.0:2038)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.google.firebase.inappmessaging.display.internal.zzf.get(com.google.firebase:firebase-inappmessaging-display@@17.0.0:1021)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.google.firebase.inappmessaging.display.zzb.get(com.google.firebase:firebase-inappmessaging-display@@17.0.0:1062)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at com.google.firebase.inappmessaging.display.internal.b.a.zzb.zza(com.google.firebase:firebase-inappmessaging-display@@17.0.0:104)
at com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplayRegistrar.zza(com.google.firebase:firebase-inappmessaging-display@@17.0.0:1058)
at com.google.firebase.inappmessaging.display.zza.create(com.google.firebase:firebase-inappmessaging-display@@17.0.0)
at com.google.firebase.components.zzh.zza(com.google.firebase:firebase-common@@16.0.1:29)
at com.google.firebase.components.zzi.get(com.google.firebase:firebase-common@@16.0.1)
at com.google.firebase.components.zzh.get(com.google.firebase:firebase-common@@16.0.1:40)
at com.google.firebase.components.ComponentContainer$$CC.get(com.google.firebase:firebase-common@@16.0.1:15)
at com.google.firebase.components.zzd.get(com.google.firebase:firebase-common@@16.0.1)
at com.google.firebase.components.zzd.zza(com.google.firebase:firebase-common@@16.0.1:68)
at com.google.firebase.FirebaseApp.zze(com.google.firebase:firebase-common@@16.0.1:716)
at …Run Code Online (Sandbox Code Playgroud) android ×10
picasso ×10
caching ×2
android-ion ×1
callback ×1
firebase ×1
memory ×1
okhttp ×1
progress-bar ×1
view ×1