只要在图片范围之内,文字可随意点击移动。

  1. package xiaosi.GetTextImage;
  2. import android.content.Context;
  3. import android.content.res.Resources;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.graphics.Canvas;
  7. import android.graphics.Paint;
  8. import android.util.DisplayMetrics;
  9. import android.view.MotionEvent;
  10. import android.view.View;
  11. import android.view.WindowManager;
  12. public class GetTextImage extends View
  13. {
  14. private float x = 20, y = 40;
  15. private static float windowWidth;
  16. private static float windowHeight;
  17. private static float left = 0;      //图片在屏幕中位置X坐标
  18. private static float top = 0;       //图片在屏幕中位置Y坐标
  19. private String str = "我爱你";
  20. private DisplayMetrics dm = new DisplayMetrics();  //用于获取屏幕的高度和宽度
  21. private WindowManager windowManager;
  22. private Bitmap newbitmap;
  23. public GetTextImage(Context context)
  24. {
  25. super(context);
  26. windowManager = (WindowManager) context
  27. .getSystemService(Context.WINDOW_SERVICE);
  28. //屏幕的宽度
  29. windowWidth = windowManager.getDefaultDisplay().getWidth();
  30. //屏幕的高度
  31. windowHeight = windowManager.getDefaultDisplay().getHeight();
  32. }
  33. public void onDraw(Canvas canvas)
  34. {
  35. Resources res = getResources();
  36. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.b);
  37. newbitmap = getTextImage(bmp, str, x, y);
  38. canvas.drawBitmap(newbitmap, 0, 0, null);
  39. }
  40. /**
  41. * 返回值: Bitmap 参数:原图片,文字 功能: 根据给定的文字生成相应图片
  42. *
  43. * @param originalMap
  44. * @param text  文字
  45. * @param x  点击的X坐标
  46. * @param y  点击的Y坐标
  47. * @return
  48. */
  49. public static Bitmap getTextImage(Bitmap originalMap, String text, float x,
  50. float y)
  51. {
  52. float bitmapWidth = originalMap.getWidth();
  53. float bitmapHeight = originalMap.getHeight();
  54. // 定义画布
  55. Canvas canvas = new Canvas(originalMap);
  56. // 定义画笔
  57. Paint paint = new Paint();
  58. //获得文本的长度(像素)
  59. float textWidth = paint.measureText(text);
  60. canvas.drawBitmap(originalMap, 0, 0, null);
  61. // 如果图片宽度小于屏幕宽度
  62. if (left + bitmapWidth < windowWidth)
  63. {
  64. // 右边界
  65. if (x >= left + bitmapWidth - textWidth)
  66. {
  67. x = left + bitmapWidth - textWidth;
  68. }
  69. // 左边界
  70. else if (x <= left)
  71. {
  72. x = left;
  73. }
  74. }
  75. else
  76. {
  77. // 右边界
  78. if (x >= windowWidth - textWidth)
  79. {
  80. x = windowWidth - textWidth;
  81. }
  82. // 左边界
  83. else if (x <= 0)
  84. {
  85. x = 0;
  86. }
  87. }
  88. // 如果图片高度小于屏幕高度
  89. if (top + bitmapHeight < windowHeight)
  90. {
  91. // 下
  92. if (y >= top + bitmapHeight)
  93. {
  94. y = top + bitmapHeight;
  95. }
  96. // 上
  97. else if (y <= top + 10)
  98. {
  99. y = top + 10;
  100. }
  101. }
  102. else
  103. {
  104. if (y >= windowHeight)
  105. {
  106. y = windowHeight;
  107. }
  108. else if (y <= 0)
  109. {
  110. y = 0;
  111. }
  112. }
  113. // 添加字
  114. canvas.drawText(text, x, y, paint);
  115. return originalMap;
  116. }
  117. @Override
  118. public boolean onTouchEvent(MotionEvent event)
  119. {
  120. if (event.getAction() == MotionEvent.ACTION_DOWN)
  121. {
  122. x = event.getX();
  123. y = event.getY();
  124. // 重绘
  125. invalidate();
  126. }
  127. return true;
  128. }
  129. }
  1. package xiaosi.GetTextImage;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class GetTextImageActivity extends Activity {
  5. /** Called when the activity is first created. */
  6. private GetTextImage get;
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. get = new GetTextImage(this);
  11. setContentView(get);
  12. }
  13. }

Android开发经验之在图片上随意点击移动文字的更多相关文章

  1. android中实现在ImageView上随意画线涂鸦

    我实现的思路: 1.继承ImageView类 2.重写onTouchEvent方法,在ACTION_MOVE(即移动时),记录下所经过的点坐标,在ACTION_UP时(即手指离开时,这时一条线已经画完 ...

  2. Android 使用Canvas在图片上绘制文字

    一个小应用,在图片上绘制文字,以下是绘制文字的方法,并且能够实现自动换行,字体自动适配屏幕大小 private void drawNewBitmap(ImageView imageView, Stri ...

  3. android BadgeView的使用(图片上的文字提醒)

    BadgeView主要是继承了TextView,所以实际上就是一个TextView,底层放了一个label,可以自定义背景图,自定义背景颜色,是否显示,显示进入的动画效果以及显示的位置等等: 这是Gi ...

  4. Android模仿QQ空间图片上传——原理

    MainActivity.class package com.example.imagedemotext; import java.io.ByteArrayOutputStream; import j ...

  5. Android EditText中插入图片并响应点击事件

    EditText中插入图片基本就是两种方法: ,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...

  6. Formdata 图片上传 Ajax

    /*图片上传*/ $("点击对象").bind("click", function(e){ $('#form-upload').remove(); $('bod ...

  7. CSS实现文字半透明显示在图片上方法

    CSS实现文字半透明显示在图片上方法 在css中文字半透明我们会需要使用滤镜效果也就是css中的filter:alpha来实现了,下面来看两个文字显示在图片上并且半透明的例子. CSS让一行文字显示在 ...

  8. android 加载自定义图片并在图片上绘图

    来源:毕设 关键词:Bitmap Canvas //毕设中需要自定义室内地图,并且在地图上绘制轨迹 //此处是一个测试Demo,实现图片的加载和记录手指在屏幕上的运动轨迹 图片的载入 使用系统提供的内 ...

  9. android拍照选择图片上传服务器自定义控件

    做android项目的时候总免不了遇到图片上传功能,虽然就是调用android系统的拍照和相册选择功能,但是总面部了把一大推代码写在activity里,看上去一大推代码头都昏了.不如把这些功能都集成一 ...

随机推荐

  1. 【Codeforces Round #239 (Div. 1) B】 Long Path

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] DP,设f[i]表示第一次到i这个房间的时候传送的次数. f[1] = 0,f[2] = 2 考虑第i个位置的情况. 它肯定是从i- ...

  2. Xwiki平台Windows搭建(Tomcat7 + XWiki6.2 + MySQL5.5)

    背景介绍 国内xwiki安装使用资料较少,根据自己使用xwiki经验,总结出来,供参考,同时希望感兴趣的朋友能够一起讨论,XWiki是一个强大的Java开源的Wiki引擎. 它支持一些受欢迎的特性如: ...

  3. 23 HBase 存储架构。

    个 Region,Region会下线,新Split出的2个子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上由此过程 ...

  4. ArcGIS api for javascript——地理处理任务-瓶中信

    描述 如果在海洋中丢下一个瓶子,本例使用颗粒追踪模型显示指定的天数后瓶子在的地方.首先,输入一个追踪瓶子的天数.然后单击按钮并在海洋里的任意地方画一个点来开始模型.几秒以后将看到一条线出现描述瓶子将去 ...

  5. android-Animation进阶(创造用户舒服的动画)

    android中经常使用的动画有Animation ,Animator两种; ---第1种经常使用的是使用在Activity切换中.比方打开一个Activity.关闭一个Activity 个人比較喜欢 ...

  6. Weka中数据挖掘与机器学习系列之基本概念(三)

    数据挖掘和机器学习 数据挖掘和机器学习这两项技术的关系非常密切.机器学习方法构成数据挖掘的核心,绝大多数数据挖掘技术都来自机器学习领域,数据挖掘又向机器学习提出新的要求和任务. 数据挖掘就是在数据中寻 ...

  7. mysql-5.6.15 开启二进制文件

    windows下 mysql 开启二进制文件 在mysql5.6.15下存在  my-default.ini配置文件  复制新建重命名my.ini  在其下加入 一定要在 [mysqld] 下面添加, ...

  8. asp.net MVC4.0中几种控制器的区别

    空的MVC控制器MVC控制器的读/写操作和视图,使用实体框架MVC控制器带空的读/写操作空API控制器API控制器的读/写操作和视图,使用实体框架API控制器带空的读/写操作

  9. 利用cvFindExtrinsicCameraParams2求取相机外参数

    cvFindExtrinsicCameraParams2函数的定义: void cvFindExtrinsicCameraParams2( const CvMat* object_points, co ...

  10. ACM-康托展开+预处理BFS之魔板——hdu1430

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...