我有一个图像,我需要使用 OnTouchListener 将发光效果应用到图像的中心
像这样的东西。
我怎样才能达到这个效果?我已经研究了我们可以将发光效果应用于图像外部的示例。
我们可以通过使用白色图像并将背景图像放在顶部来实现这一点,但是我们可以不使用图像来做到这一点吗?
编辑
我也找到了这篇文章,但没有解决方案。
我有一个图像,我需要使用 OnTouchListener 将发光效果应用到图像的中心
像这样的东西。
我怎样才能达到这个效果?我已经研究了我们可以将发光效果应用于图像外部的示例。
我们可以通过使用白色图像并将背景图像放在顶部来实现这一点,但是我们可以不使用图像来做到这一点吗?
编辑
我也找到了这篇文章,但没有解决方案。
在setOnTouchListener
获取getDrawingCache()
图像时,创建您想要的渐变位图,然后将图像叠加在一起
试试这个
final ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if(drawIt){
drawIt = false;
//Build the cache
imageView.buildDrawingCache();
Bitmap original = imageView.getDrawingCache();
//Build the gradient
Bitmap gradient = getGradient();
//Overlay the images
Bitmap finalImage = overlay(original,gradient,event.getX(),event.getY());
imageView.setImageBitmap(finalImage);
}
break;
case MotionEvent.ACTION_UP:
drawIt = true;
break;
}
return false;
}
});
private Bitmap getGradient() {
RadialGradient gradient = new RadialGradient(200 , 200, 200, 0xFFFFFFFF,
0x00000000, android.graphics.Shader.TileMode.CLAMP);
Paint p = new Paint();
p.setDither(true);
p.setShader(gradient);
Bitmap bitmap = Bitmap.createBitmap(400, 400, Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
c.drawCircle(200, 200, 200, p);
return Bitmap.createScaledBitmap(bitmap, 50, 50, false);
}
private Bitmap overlay(Bitmap bmp1, Bitmap bmp2,float x, float y) {
Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1, new Matrix(), null);
// Use your x and y cordinates here
canvas.drawBitmap(bmp2, 100,100, null);
return bmOverlay;
}
这是我得到的
你可以在这里做你的修改我已经为你上传了项目
祝你好运
编辑
要在中心绘制它,请在overlay
方法中使用这条线
canvas.drawBitmap(bmp2, bmp1.getWidth()/2 - bmp2.getWidth()/2,bmp1.getHeight()/2 - bmp2.getHeight()/2, null);
并将位图添加到按钮使用这个
Button btn = (Button) findViewById(R.id.button1);
Drawable d = new BitmapDrawable(getResources(),finalImage);
btn.setBackgroundDrawable(d);
但请注意,当您将此位图设置为按钮时,按钮将调整大小,因此最好不要使用wrap_content
,而是在硬代码中指定高度和宽度,例如25dp
等100dp
。这是您必须控制的逻辑
您也可以使用ImageButton并将其设置为
btn.setImageBitmap(finalImage);
对于 MotionEvent
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawIt = true;
break;
case MotionEvent.ACTION_UP:
if(drawIt){
//Build the cache
imageView.buildDrawingCache();
Bitmap original = imageView.getDrawingCache();
//Build the gradient
Bitmap gradient = getGradient();
//Overlay the images
Bitmap finalImage = overlay(original,gradient,event.getX(),event.getY());
imageView.setImageBitmap(finalImage);
Button btn = (Button) findViewById(R.id.button1);
Drawable d = new BitmapDrawable(getResources(),finalImage);
btn.setBackgroundDrawable(d);
}
break;
case MotionEvent.ACTION_CANCEL:
drawIt = false;
break;
}
编辑 2
声明这些实例变量
private boolean drawIt = true;
Button btn1,btn2;
int x_limit, y_limit;
Bitmap bmpOrignal, bmpGradient, bmpOverlay;
onTouch
并像这样编码
@Override
public boolean onTouch(View v, MotionEvent event) {
if(drawIt){
drawIt = false;
v.buildDrawingCache();
bmpOrignal = v.getDrawingCache();
bmpGradient = getGradient();
bmpOverlay = overlay(bmpOrignal,bmpGradient);
x_limit = v.getLeft() + bmpOrignal.getWidth();
y_limit = v.getTop() + bmpOrignal.getHeight();
}
if(event.getX() > x_limit || event.getY() > y_limit){
((Button)v).setBackgroundDrawable(new BitmapDrawable(getResources(),bmpOrignal));
}else {
((Button)v).setBackgroundDrawable(new BitmapDrawable(getResources(),bmpOverlay));
}
if(event.getAction() == MotionEvent.ACTION_UP){
drawIt = true ;
}
return false;
}
您可以从这里下载新的更新项目
如何使用画一个圆
Canvas canvas = new Canvas(bmp);
canvas.drawCircle(x, y, radius, paint);
然后在 for 循环中以稍小的 alpha 和更大的半径一遍又一遍地绘制同一个圆?
Paint.setAlpha();
编辑:实际上这对记忆来说听起来很糟糕,但以前从未尝试过。