안 드 로 이 드 사용자 정의 지우개 효과
public class picFingerToTest extends View {
private Paint paint;
private Bitmap decodeResourceSRC;
private Bitmap createBitmapDST;
// ,
private Path path;
private float perX;
private float perY;
public picFingerToTest(Context context, AttributeSet attrs) {
super(context, attrs);
// 1、
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
// 2、
paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(45);
// 3、
//
decodeResourceSRC = BitmapFactory.decodeResource(getResources(), R.drawable.welcome, null);
//
createBitmapDST = Bitmap.createBitmap(decodeResourceSRC.getWidth(), decodeResourceSRC.getHeight(),
Config.ARGB_8888);
path = new Path();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//
int saveLayer = canvas.saveLayer(0, 0, getWidth(), getHeight(), null,Canvas.ALL_SAVE_FLAG);
//
Canvas canvas2 = new Canvas(createBitmapDST);
canvas2.drawPath(path, paint);
//
canvas.drawBitmap(createBitmapDST, 0, 0, paint);
//
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
canvas.drawBitmap(decodeResourceSRC, 0, 0, paint);
paint.setXfermode(null);
canvas.restoreToCount(saveLayer);
}
// ,
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
//
case MotionEvent.ACTION_DOWN:
path.moveTo(event.getX(), event.getY());
perX = event.getX();
perY = event.getY();
return true;
case MotionEvent.ACTION_MOVE:
float endX = (perX + event.getX()) / 2;
float endY = (perY + event.getY()) / 2;
path.quadTo(perX, perY, endX, endY);
perX = event.getX();
perY = event.getY();
postInvalidate();
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return super.onTouchEvent(event);
}
}
안 드 로 이 드 지우개 그림 기능
public void onCreate() {
//
ImageView ivTop = (ImageView) findViewByid(R.id.iv_top);
Options opts = new Options(); // , ,
opts.inSampleSize = 2; // 2/1
// ,decodeResource RGB(red,green,blue),ARGB(alpha,red,green,blue)
Bitmap topImage = BitmapFactory.decodeResources( getResource(),R.drawable.top, opts);
// , :ARGB
Bitmap blank = Bitmap.createBitmap(topImage.getWidth(), topImage.getHeight, Config.ARGB_4444);
// topImage
Canvas canvas = new Canvas(blank);
// topImage ARGB()
canvas.drawBitmap(topImage, 0, 0, null);
ivTop.setImageBitmap(blank);
}
class MyOnTouchListoner implements OnTouchListener {
@Override pulic boolean OnTouch(View v, MotionEvent event) {
//
if (event.getAction() == MotionEvent.ACTION_MOVE) {
//
int x = (int) event.getX();
int y = (int) event.getY();
for (int i = x - 10; i < x + 10; i++) {
for (int j = y - 10; j < y + 10; j++) {
//
if (j >= 0 && blank.getHeight() && i >= 0 && i < blank.getWidth()) {
blank.setPixel(i, j, Color.TRANSPARENT);
}
}
}
// ImageView
ivTop.setImageBitmap(blank);
}
return true; //true .false
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.