java - 使用 BitmapShader 在画布上绘制 Emoji
问题描述
我正在尝试绘制表情符号,每当我触摸屏幕时,我都会使用setShader
方法并BitmapShader
制作它,但下面的代码给出了这个:
public class MainActivity extends Activity implements View.OnTouchListener{
float downx = 0;
float downy = 0;
float upx = 0;
float upy = 0;
Canvas canvas;
Paint paint;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Point point = new Point();
Display cureentDispaly = getWindowManager().getDefaultDisplay();
cureentDispaly.getSize(point);
int weidth = point.x;
int height = point.y;
Bitmap bitmap = Bitmap.createBitmap(weidth , height, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);
paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(50);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setShader(new BitmapShader(BitmapFactory.decodeResource(getResources(),R.drawable.heart), Shader.TileMode.REPEAT, Shader.TileMode.REPEAT));
paint.setStyle(Paint.Style.STROKE);
imageView = (ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);
imageView.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
downx = event.getX();
downy = event.getY();
break;
case MotionEvent.ACTION_MOVE:
upx = event.getX();
upy = event.getY();
canvas.drawLine(downx, downy, upx, upy, paint);
imageView.invalidate();
downx = upx;
downy = upy;
break;
case MotionEvent.ACTION_UP:
upx = event.getX();
upy = event.getY();
canvas.drawLine(downx, downy, upx, upy, paint);
imageView.invalidate();
break;
case MotionEvent.ACTION_CANCEL:
break;
default:
break;
}
return true;
}
}
我想要的是类似于这个Draw With Emoji和这个:
如何在不裁剪的情况下绘制重复的表情符号
?
解决方案
推荐阅读
- python - Ansible - 访问另一台主机的变量
- javascript - 如何修复警告“eslint-disable-next-line no-unused-expressions”?
- python-3.x - Selenium Python 迭代 ol 中的 li 元素
- javascript - 在 Javascript 中比较 2 Array 是什么意思?
- javascript - 为什么更新许多没有猫鼬
- java - 避免连接到主动/被动 ActiveMQ 时出现错误消息
- tensorflow - 为什么使用的 gpu 设备与日志信息不一致?
- reactjs - 用另一个数组中的元素更新数组
- android - 如何处理android日历中实例的日期、日期和时间戳?
- javascript - 将字符串数组分组到包含嵌套数组的对象中