聚光灯效果图
代码
DrawView.java
package com.rp.rpspotlight;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.Nullable;
public class DrawView extends View {
//初始化圆的位置
public float currentX=500;
public float currentY=500;
public DrawView(Context context) {
this(context,null);
}
public DrawView(Context context, @Nullable AttributeSet attrs) {
this(context,null,0);
}
public DrawView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建画笔
canvas.drawColor(Color.BLACK); //画布颜色
Paint paint=new Paint();
//填充颜色
setWillNotDraw(false);
setLayerType(LAYER_TYPE_HARDWARE, null);
paint.setAntiAlias(true);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); //将圆抠成透明
//paint.setColor(Color.BLACK);
//开始画圆,float cx开始x的位置, float cy开始Y的位置, float radius圆的半径, @NonNull Paint paint画笔
canvas.drawCircle(currentX,currentY,80,paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//getX获得点击x位置,getY获得点击Y的位置
currentX= event.getX();
currentY=event.getY();
//重绘自身
invalidate();
//返回true自身消费
return true;
}
}
引用
<com.rp.rpspotlight.DrawView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
将Activity背景设为透明
<style name="TransparentTheme" parent="Theme.AppCompat.NoActionBar">
<!--不设置activity进入和退出动画样式-->
<item name="android:windowAnimationStyle">@null</item>
<!--设置窗口的背景为透明,设置透明背景必须要设置此项-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--设置窗口的背景是否为半透明,设置透明背景必须要设置此项-->
<item name="android:windowIsTranslucent">true</item>
<!--设置状态栏的背景为半透明-->
<item name="android:windowTranslucentStatus">true</item>
</style>
以上即可。