如何用图片制作自定义形状(在形状内)

Posted

技术标签:

【中文标题】如何用图片制作自定义形状(在形状内)【英文标题】:How can make custom shape with picture (inside the shape) 【发布时间】:2021-11-08 04:05:54 【问题描述】:

我是 android 编程新手,我尝试设计这种形状:

检查this link查看我想要设计的形状

这个形状是怎么做出来的,怎么把图片做成亚历山大这样的形状?

谁能帮帮我? 请回答所有细节以了解代码

谢谢

【问题讨论】:

【参考方案1】:

在 build.gradle 中添加依赖

implementation 'com.github.siyamed:android-shape-imageview:0.9.+@aar'

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".MainActivity">
    
    <com.github.siyamed.shapeimageview.mask.PorterShapeImageView
        android:id="@+id/imageView"
        android:layout_
        android:layout_
        app:siShape="@drawable/shape" />
    
</LinearLayout>

活动

public class MainActivity extends AppCompatActivity 

    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView=findViewById(R.id.imageView);
        imageView.setImageResource(R.drawable.img);
    

可绘制资源

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#FFC107" />
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners
        android:topLeftRadius="0dip"
        android:topRightRadius="70dip"
        android:bottomLeftRadius="70dip"
        android:bottomRightRadius="0dip" />
</shape>

输出

【讨论】:

这个形状怎么插入图片? 我已经编辑了答案,请查看@Kirollos Mallak 感谢您的回答...... @Tanveer Hasan 我正在使用 Kotlin(这会有所不同吗?)还有其他东西我正在使用卡片视图和 recyclerView,所以我可以使用形状并插入图片(在 XML 中,而不是像你做的那样 Activity)【参考方案2】:

您可以为此使用ShapeableImageView,它在material 组件包中提供。如果你已经在项目中使用了 Material 主题,那么你可以继续使用,否则,添加 material 依赖。

implementation 'com.google.android.material:material:1.4.0'

并且继承,你 AppThemeMaterialComponents,在 styles.xml

<style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
     ...
     ...
</style>

style.xml 添加新样式以创建图像的圆角。

<style name="ShapeAppearanceOverlay.RoundedCorner" parent="">
    <item name="cornerSizeTopRight">75dp</item>
    <item name="cornerFamilyTopRight">rounded</item>
    <item name="cornerSizeBottomLeft">75dp</item>
    <item name="cornerFamilyBottomLeft">rounded</item>
</style>

在布局中将ImageView 更改为ShapeableImageView,并在ShapeAppearnaceOverlay 上方添加样式,使用app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.RoundedCorner"

<com.google.android.material.imageview.ShapeableImageView
        android:layout_
        android:layout_
        android:src="@drawable/pots"
        android:scaleType="centerCrop"
        app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.RoundedCorner"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toEncrypt"
        app:layout_constraintBottom_toTopOf="@id/decrypted"
        android:id="@+id/encrypted" />

注意 - 使用android:scaleType="centerCrop",这样您就不会在图像的任何一侧出现剪切效果。

结果 -

【讨论】:

以上是关于如何用图片制作自定义形状(在形状内)的主要内容,如果未能解决你的问题,请参考以下文章

说说在 Canvas 中如何用图片来填充形状

Android 自定义形状按钮

自定义形状 UIView

android制作自定义布局形状[关闭]

如何制作自定义 UIButton,使其具有不规则的曲线,如岩石、石头、树木……等?

如何在颤动中制作自定义按钮形状