江阳小道 2014-10-23 04:40 采纳率: 0%
浏览 1137

Android如何实现自定义文字水印?

实现在图片上添加文字水印功能。有以下几点要求:
1、可以更改文字颜色
2、可对随意移动文字水印
3、可对文字水印进行缩放操作
4、点击文字水印可以对内容进行编辑
遇到的主要问题:
由于使用EditText进行文字编辑,当EditText移动到新的位置(采用layout()函数)后,输入文字时,EditText会回到初始位置。
有没有什么好的方案解决上述问题?最好能有相关DEMO。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 23:06
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要实现这个功能,你可以使用TextView来显示和编辑文本,并使用ImageView来放置水印。以下是具体的步骤和代码示例:

    首先,在你的布局文件中创建一个LinearLayout作为容器,然后在其中添加两个视图:一个用于显示水印(在这里我们可以选择使用一个ImageView),另一个用于显示编辑文本的区域(这里我们使用一个EditText)。

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/watermark_image_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <EditText
                android:id="@+id/edit_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </LinearLayout>
    

    接下来,在Java代码中处理这些组件的行为:

    public class MainActivity extends AppCompatActivity {
    
        private TextView textView;
        private ImageView watermarkImageView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 获取组件引用
            textView = findViewById(R.id.edit_text);
            watermarkImageView = findViewById(R.id.watermark_image_view);
    
            // 创建一个新的水印
            Bitmap waterMarkBitmap = createWatermarkImage();
            // 设置水印的位置
            watermarkImageView.setImageBitmap(waterMarkBitmap);
        }
    
        private Bitmap createWatermarkImage() {
            // 使用随机颜色填充水印
            int color = Color.argb(100, 255, 255, 255);
            Canvas canvas = new Canvas(watermarkImageView.getLayoutParams().width * 2,
                    watermarkImageView.getLayoutParams().height * 2);
            Paint paint = new Paint();
            paint.setColor(color);
            RectF rectF = new RectF(0, 0, canvas.getWidth(), canvas.getHeight());
            canvas.drawRoundRect(rectF, 10, 10, paint);
    
            return BitmapFactory.decodeResource(getResources(),
                    R.drawable.ic_launcher_background);
        }
    }
    

    在这个例子中,我们首先获取了EditTextImageView的引用,然后创建了一个新的水印图像。我们将水印设置为当前活动中的ImageView并应用适当的配置。这样就可以看到你想要的效果了。

    评论

报告相同问题?