Android Gallery 中 CoverFlow 中的错误图像重叠

2024-03-25

我正在摆弄 CoverFlow从这里 http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html以满足我的喜好并且无法解决一个问题。这是屏幕截图:

截屏 https://i.stack.imgur.com/wzXKL.jpg

中心图像右侧的图片重叠得很严重。这是我的代码:

protected boolean getChildStaticTransformation(View child, Transformation t) {

  final int childCenter = getCenterOfView(child);
  int rotationAngle = 0;
  t.clear();
  t.setTransformationType(Transformation.TYPE_MATRIX);

    if (childCenter == mCoveflowCenter) {
        transformImageBitmap((ImageView) child, t, 0);
    } else {      
        rotationAngle = Math.abs(mCoveflowCenter - childCenter);
        transformImageBitmap((ImageView) child, t, rotationAngle);         
    }    

return true;
}

/**
* This is called during layout when the size of this view has changed. If
* you were just added to the view hierarchy, you're called with the old
* values of 0.
*
* @param w Current width of this view.
* @param h Current height of this view.
* @param oldw Old width of this view.
* @param oldh Old height of this view.
 */
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  mCoveflowCenter = getCenterOfCoverflow();
  super.onSizeChanged(w, h, oldw, oldh);
 }

 /**
  * Transform the Image Bitmap by the Angle passed 
  * 
  * @param imageView ImageView the ImageView whose bitmap we want to rotate
  * @param t transformation 
  * @param rotationAngle the Angle by which to rotate the Bitmap
  */
 private void transformImageBitmap(ImageView child, Transformation t, int rotationAngle) {            
  mCamera.save();
  final Matrix imageMatrix = t.getMatrix();
  final int imageHeight = child.getLayoutParams().height;
  final int imageWidth = child.getLayoutParams().width;

  mCamera.translate(0.0f, 0.0f, 100.0f);

  float zoomAmount = 0;
  //skalowanie za pomocą translate nie rotational angle?
  zoomAmount = Math.abs((float) (rotationAngle));

  Log.v("zoom", Float.toString(zoomAmount));
  mCamera.translate(0.0f, 0.0f, zoomAmount - 300.0f);          

  mCamera.getMatrix(imageMatrix);               
  imageMatrix.preTranslate(-(imageWidth/2), -(imageHeight/2)); 
  imageMatrix.postTranslate((imageWidth/2), (imageHeight/2));
  mCamera.restore();
}

它会转换每张图片的相机,因此较小的图片更多地进入屏幕(logcat 值是完美的)。这是什么意思?我是否必须先画较小的图片,然后再画较大的图片,等等?如果是这样,我该怎么做?


您已通过覆盖指定了正确的顺序getChildDrawingOrderGallery类的功能。上述行为可以通过以下代码来实现:

int lastPosition;

@Override
protected int getChildDrawingOrder(int childCount, int i) {

    if (i == 0)
        lastPosition = 0;

    int centerPosition = getSelectedItemPosition()
            - getFirstVisiblePosition();

    if (i == childCount - 1) {
        return centerPosition;
    } else if (i >= centerPosition) {
        lastPosition++;
        return childCount - lastPosition;
    } else {
        return i;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Gallery 中 CoverFlow 中的错误图像重叠 的相关文章

  • Android ListView 子项

    我最近为 Android 应用程序创建了一个新的 ListView 对象 但遇到了一些错误 当我尝试使用简单适配器创建一个包含列表中子项目的项目时 创建的最新项目与其他项目重叠 我正在使用地图列表来创建项目 例如 如果我向地图列表中添加一个
  • 是否可以在图片上叠加图标

    我正在创建一个允许用户上传图片的应用程序 当图片上传成功后 我想在右上角添加一个绿色的勾号 可绘制 失败时也一样 但有一个十字 Atm 我正在使用 Glide 在屏幕上显示 URI 我怎样才能做到这一点 您可以通过调用 glide 侦听器来
  • 使用 Gradle 检测 IDE 环境

    无论如何 有没有办法检测我正在运行我的项目的环境 像这样的事情 构建 gradle def usingIntelliJ def usingAndroidStudio if usingIntelliJ buildConfigField Str
  • 如何将数据从当前活动传递到暂停的活动?

    我想知道如何将数据从当前活动传递到暂停的活动 请指教 我们将暂停的活动称为 A 将 当前 活动称为 B 让 B 将结果传达给 A 的方法是 A 调用startActivityForResult 代替startActivity 并供 B 使用
  • if-else 无法与我的复选框一起正常工作

    我的应用程序中有一个网格 当我选择一个项目时 它会前瞻性地加载该项目 我只想允许仅在以下情况下选择该复选框isMayoBaseAvailable返回真 这是我使用的代码 当我使用此代码并调试它时它工作正常 但是当我运行应用程序并检查它时总是
  • firebase android 基于类的更新不尊重字段名称的大小写

    我声明了以下类 注意大小写选择 public class User private String DisplayName private Boolean Proxy false SuppressWarnings unused public
  • 当我将 Android Studio 迁移到更高分辨率的显示器时,文本变得模糊

    is there any way I can change the resolution of Android Studio recently I migrate my Android Studio from rMBP 13 to rMBP
  • Kotlin自定义get执行方法调用

    为了提高对 SharedPreferences Editor 调用的可读性 我想使用一个 Kotlin 变量 每次需要新的 SharedPreferences Editor 时都会执行 getSharedPreferences edit 最
  • Android Beacon Library - 正确使用BluetoothMedic?

    根据以下观察 我对蓝牙医疗的使用有一些疑问 由于蓝牙在我的一台设备上停止 我一直在查看 BluetoothMedic 看看它是否能提供帮助 我查看了调试消息和源代码 根据我是否使用enablePeriodicTests 或单独运行runSc
  • Android:进程已死亡 - 资源不足?

    我编写的简单 HTTP GET 请求有一个小问题 该请求每 X 分钟请求一个 URL 我每天都会遇到一两次进程在 GET 请求期间停止的情况 这是调试日志的示例 12 07 16 29 22 650 V TAG 11655 Executin
  • 在原生 Android 应用程序中使用 WebView 整个布局有用吗?

    我目前正在开发一个原生 Android 应用程序 我的应用程序有很多活动 我要发展native安卓应用程序 但在某些情况下 我想使用webview整个布局只是一个网络视图 不是线性的或相对的或其他布局 只是一个网络视图 所有图像和其他内容都
  • Android - 如何使用操作创建通知[重复]

    这个问题在这里已经有答案了 我正在创建这样的通知 Notification Builder builder new Notification Builder context builder setContentTitle notifyMes
  • Facebook 登录按钮:应用自定义样式

    我在使用新的 Facebook android sdk 4 时遇到了一个奇怪的问题 对于旧的 sdk 版本 我使用的是
  • 将项目导入 Eclipse 后出现“必须重写超类方法”错误

    任何时候我必须将我的项目重新导入到 Eclipse 中 如果我重新安装了 Eclipse 或者更改了项目的位置 几乎全部我的重写方法的格式不正确 导致错误 该方法必须重写超类方法 值得注意的是 无论出于何种原因 Android 项目中方法参
  • 在选择项目之前设置微调器的文本

    我有一个包含三个项目的微调器 我使用 XML 字符串数组资源来为其提供数据 当您打开活动时 微调器通常会显示数组列表中的第一项 我想更改它并在选择项目之前在微调器中显示文本 选择一个 我怎样才能做到这一点 您可以通过以下两种方式之一进行操作
  • android.R.layout.simple_list_item_1是什么?

    在我看到的所有示例中 他们在创建 ArrayAdapter 时仅使用 android R layout simple list item 1 android R layout simple list item 1是什么 它只是一个名为sim
  • 多次调用 startService 时实际会发生什么

    我正在打电话startService 多次对同一服务有不同的意图 很明显 任何时候都只存在一个服务实例startCommand 被称为每个startService 我的问题是 调用时有性能影响吗startService 多次 意图会按照调用
  • 从应用程序打开无线设置

    我想直接从我的应用程序打开 设置 gt 无线和网络 我怎样才能做到这一点 尝试这个 startActivity new Intent android provider Settings ACTION WIRELESS SETTINGS 或者
  • android.media.Ringtone.play() 在播放 28 次后停止工作

    我有一个打开了几个小时的应用程序 并使用后台服务并附加了前台通知 每隔一段时间就会使用以下方式播放声音 try Ringtone r RingtoneManager getRingtone context uri r play catch
  • 如何使用支持FileProvider将内容分享给其他应用程序?

    我正在寻找一种使用 Android 支持库与外部应用程序正确共享 而不是打开 内部文件的方法文件提供者 http developer android com reference android support v4 content File

随机推荐