어떻게 matrix 를 이용 하여 그림 의 그림자 효 과 를 실현 합 니까?
3253 단어 matrix그림.거꾸로 비 친 그림자
1.그림자 효과 가 필요 한 그림 을 가 져 오고,여기 서 원 그림 의 반 을 가 져 옵 니 다.
2.그림자 그림 에 색상 그 라 데 이 션 추가
구체 적 인 실현 은 아래 코드 에서 말 한 바 와 같이 저 희 는 사용자 정의 view 형식 으로 효과 도 를 제시 합 니 다.코드 는 다음 과 같 습 니 다.
package com.flection.view;
import com.flection.main.R;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.View;
public class FlectionView extends View {
Context mContext=null;
public FlectionView(Context context) {
super(context);
}
public FlectionView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext=context;
}
@SuppressLint("DrawAllocation")
@Override
protected void onDraw(Canvas canvas) {
//
this.setBackgroundColor(Color.parseColor("#8B8378"));
Bitmap oldBitmap = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.dropbox);
Bitmap newBitmap = createFlectionBitmap(oldBitmap);
canvas.drawBitmap(newBitmap,newBitmap.getWidth() ,newBitmap.getHeight(), new Paint());
this.invalidate();
}
// + bitmap
private Bitmap createFlectionBitmap(Bitmap oldBitmap) {
int mWidth = oldBitmap.getWidth();
int mHeight = oldBitmap.getHeight();
//
int gap = 2;
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap flection = Bitmap.createBitmap(oldBitmap, 0, mHeight / 2,
mWidth, mHeight / 2, matrix, false);
Bitmap background = Bitmap.createBitmap(mWidth, mHeight+gap+mHeight/2, Config.ARGB_8888);
Canvas canvas = new Canvas(background);
Paint p1 = new Paint();
//
canvas.drawBitmap(oldBitmap, 0, 0, p1);
//
canvas.drawBitmap(flection, 0, mHeight+gap, p1);
Paint shaderPaint = new Paint();
LinearGradient shader = new LinearGradient(0, mHeight, 0,
flection.getHeight(), 0x70ffffff, 0x00ffffff, TileMode.MIRROR);
shaderPaint.setShader(shader);
shaderPaint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_IN));
//
canvas.drawRect(0, mHeight+gap, mWidth, background.getHeight(), shaderPaint);
return background;
}
}
실 현 된 효 과 는 다음 그림 과 같다.이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
존재하는 날씨 경로 찾기 GeeksForGeeks0, 1, 2, 3으로 채워진 크기 n*n의 그리드가 주어집니다. 소스에서 대상까지 가능한 경로가 있는지 확인합니다. 위, 아래, 오른쪽, 왼쪽으로 이동할 수 있습니다. 셀에 대한 설명은 다음과 같습니다. 셀 1의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.