壁纸应用程序的 Android 裁剪/缩放/平移库?类似于 Nova Launcher“设置壁纸”屏幕

Posted

技术标签:

【中文标题】壁纸应用程序的 Android 裁剪/缩放/平移库?类似于 Nova Launcher“设置壁纸”屏幕【英文标题】:Android Crop/Zoom/Pan library for Wallpaper app? Similar to Nova Launcher "Set Wallpaper" screen 【发布时间】:2014-07-17 15:55:43 【问题描述】:

我一直在开发一个壁纸应用程序,它可以获取一组壁纸(通过我选择的 api),为用户提供分享、直接设置为壁纸(如果支持则可滚动)或编辑和设置图片的功能.

这个编辑屏幕是我面临一些错误/问题的地方。

我需要用户能够根据自己的喜好裁剪/缩放/平移图像并将其设置为墙纸。与 Nova 壁纸的做法类似,如果裁剪选择减少,则整个图像会根据该选择进行放大。我相信所有这些都发生在一个图像视图中。

但是,就我而言,我碰巧使用了两个图像视图,一个用于裁剪,另一个用于缩放。 裁剪库:github-dot-com/edmodo/cropper/

一旦用户裁剪,第二个图像视图将填充来自裁剪器的选择位图。此图像视图用于缩放或平移。 缩放/平移库:github-dot-com/jasonpolites/gesture-imageview

这是该屏幕的布局: http://i.stack.imgur.com/wnjcP.jpg

还有代码:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:gesture-image="http://schemas.polites.com/android"
android:id="@+id/scrollview"
android:layout_
android:layout_ >

<LinearLayout 
android:id="@+id/mylayout"
android:layout_
android:layout_
android:focusableInTouchMode="true"
android:orientation="vertical"

tools:context=".MainActivity" >

 <LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal" >

    <Button
        android:id="@+id/Button_crop"
        style="@style/RoboTheme"
        android:layout_
        android:layout_
        android:paddingLeft="25dp"
        android:paddingRight="25dp"
        android:text="@string/crop"
        android:textColor="#33B5E5"
        android:textSize="12sp" />

    <ImageButton
        android:id="@+id/Button_rotate_left"
        android:layout_
        android:layout_
        android:src="@drawable/rotate_left" />

    <ImageButton
        android:id="@+id/Button_rotate"
        android:layout_
        android:layout_
        android:src="@drawable/rotate_right" />

     <Button
        android:id="@+id/Button_setother"
        style="@style/RoboTheme"
        android:layout_
        android:layout_
        android:paddingLeft="25dp"
        android:paddingRight="25dp"
        android:text="@string/setother"
        android:textColor="#33B5E5"
        android:textSize="12sp" />


</LinearLayout>

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="horizontal" 
    android:id="@+id/checkboxlayout">

     <CheckBox
         android:id="@+id/scrollable"
         style="@style/RoboTheme"
         android:layout_
         android:layout_
         android:textColor="#33B5E5"
         android:textSize="12sp"
         android:checked="false"
         android:text="Scrollable" />



     <Button
        android:id="@+id/Button_setwallpaper"
        style="@style/RoboTheme"
        android:layout_
        android:layout_
        android:paddingLeft="25dp"
        android:paddingRight="25dp"
        android:text="@string/setwallpaper"
        android:textColor="#33B5E5"
        android:textSize="12sp" />

 </LinearLayout>


 <com.edmodo.cropper.CropImageView
         xmlns:custom="http://schemas.android.com/apk/res-auto"
         android:id="@+id/CropImageView"
         android:layout_
         android:layout_
         android:layout_weight="1"
         android:layout_gravity="center"

         android:adjustViewBounds="true" />

<com.polites.android.GestureImageView
    android:id="@+id/croppedImageView"

    android:layout_
    android:layout_
    android:layout_weight="1"
    android:adjustViewBounds="true"
    android:contentDescription="@string/croppedImageDesc"
    gesture-image:max-scale="10.0"
    gesture-image:min-scale="0.1"
    gesture-image:strict="false" />

 </LinearLayout>

</ScrollView>

然而,我想要一些帮助以提高此布局的效率。我不需要滚动不同的设备或基于类似于 Nova Launcher 的“设置壁纸”屏幕的内容,例如:

http://i.stack.imgur.com/WaJRO.png

非常感谢任何帮助!

谢谢,

阿纳布

【问题讨论】:

尝试将此库与github.com/chrisbanes/PhotoView此库结合使用 嗯,我也试过这个库。这几乎就是我已经包含的github.com/jasonpolites/gesture-imageview 提供的内容。而且我正在寻找一种可以在一个图像视图中实现裁剪和缩放效果的方法,类似于 Nova Launcher 的“设置壁纸”屏幕的行为方式,在 OP 中截图。 github.com/biokys/cropimage 我在我的项目中使用了这个库,它可以做你想做的事,但在它自己的活动中,你必须在清单中声明 嘿! @IllegalArgument 谢谢!这个库正是我目前在我的项目中寻找、集成和运行良好的东西! 我很高兴它对你有用。图书馆的用户界面不如cropper,但它的表现不错。 【参考方案1】:

Nova Launcher 的裁剪活动基于 AOSP Gallery2 https://android.googlesource.com/platform/packages/apps/Gallery2/ 中的 CropImage.java。引入所有必需的依赖项,然后修复针对 SDK 构建的所有构建问题(例如他们可能在视图中使用 mLeft,而您必须将其替换为 getLeft()),这需要一些工作。

【讨论】:

以上是关于壁纸应用程序的 Android 裁剪/缩放/平移库?类似于 Nova Launcher“设置壁纸”屏幕的主要内容,如果未能解决你的问题,请参考以下文章

生成组合仿射变换矩阵,裁剪+缩放+平移+斜切+旋转

生成组合仿射变换矩阵,裁剪+缩放+平移+斜切+旋转

.NetCore实现图片缩放与裁剪 - 基于ImageSharp

是否有任何代码可以在不裁剪和放大android的情况下设置壁纸?

Android绘图使用 Graphics2D 实现动态效果

Android绘图使用 Graphics2D 实现动态效果