gpt4 book ai didi

android - OnTouch 将发光效果应用到图像中心

转载 作者:太空狗 更新时间:2023-10-29 16:04:55 25 4
gpt4 key购买 nike

我有一张图片,我需要使用 OnTouchListener 将发光效果应用到图片的中心

像这样。

enter image description here

我怎样才能达到这个效果?我研究了可以将发光效果应用于图像外部的示例。

我们可以通过使用白色图像并将背景图像放在顶部来实现这一点,但是我们可以不使用图像来实现吗?

编辑

我也找到了这篇文章,但没有解决方案。

Android : Image button or button Highlighted with Effect when Pressed

最佳答案

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;
}

这是我得到的

enter image description here

你可以在这里做你的修改我有uploaded适合你的项目

祝你好运

编辑

要在中心绘制它,请在 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,而是在硬代码中指定高度和宽度,例如 25dp100dp 等。这是你必须控制的逻辑

您还可以使用 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;
}

您可以从here 下载新的更新项目。

关于android - OnTouch 将发光效果应用到图像中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18373087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com