Android的颜色更顺畅 [英] Android color smoother
问题描述
这是一个有点难以解释我的问题,所以我会用一些图片显示它。我做了这个位图:
和我想画的光里面的一个圆圈,用这个code:
矩形bounds1 =新的矩形(X,Y,X + bit.getWidth(),Y + bit.getHeight());
的for(int i = bounds1.left; I< bounds1.right;我++){
对于(INT J = bounds1.top; J< bounds1.bottom; J ++){
INT结果=(int)的的Math.sqrt((×2-ⅰ)*(×2-I)+(Y2-J)*(Y2-j)条);
如果(结果< = 120){
INT像素=(bit.getPixel第(i-t,J-γ));
int的A,R,G,B;
INT不同的结果= / 10;
//改变各成分的值
一个= Color.alpha(象素);
R = Color.red(象素)+ RN;
G = Color.green(像素)+ GN;
B = Color.blue(像素)+ BN;
// R,G,B值,它们超出范围0到255应该设置为0或255
如果(R> = 256){
R = 255;
}否则如果(为r 0){
使r = 0;
}
如果(g取代; = 256){
G = 255;
}否则如果(克℃,){
克= 0;
}
如果(B个= 256){
B = 255;
}否则如果(b将0){
B = 0;
}
bit.setPixel第(i-t,J-Y,Color.argb(A,R,G,B));
}
}
我成功地创造出这样的:
现在,我试图让光球更顺畅并没有那么平静,所以它不会看起来像一个圆圈,任何人有任何想法我怎么能做到这一点?我试过很多东西,但没有制定。
绘制整个code:
公共类CreatorView扩展视图
{
上下文℃;
布尔的quickfix = FALSE;
布尔bin_isEmpty =真;
布尔iftrue = FALSE;
布尔stopnow = FALSE;
布尔按钮pressed = FALSE;
字符串arrowcheck =;
INT screenw;
INT screenh;
INT pixelx;
诠释pixely;
INT smallpixelx;
诠释smallpixely;
点arrowsp;
涂料paintblock;
INT currentColor = 0;
INT×2 = 120;
INT Y2 = 120;
INT RN = 60;
INT GN = 45;
诠释亿= 30;
位图tileBitmap;
位图lightBitmap;
RectF lightRect;
油漆paint0 =新的油漆(Paint.ANTI_ALIAS_FLAG);
油漆paint1 =新的油漆(Paint.ANTI_ALIAS_FLAG);
位图山顶;
位图mountainbottom;
位图草;
位图污物;
位图DIRT2;
位图dirt3;
位图stonegrass;
位图石;
位图stone2;
位图stone3;
位图stone4;
位图云;
位图bin_Empty;
位图bin_Full;
位图arrowno;
位图arrown;
位图arrowl;
位图arrowr;
位图arrowu;
位图arrowd;
位图arrowul;
位图arrowur;
位图保存;
位图fliph;
位图flipv;
位图Rotatef;
位图Rotateb;
位图arrowdl;
位图arrowdr;
位图grassSide;
位图grassTop;
位图橙色;
位图的蓝色;
位图smallpixel;
位图PixelDetect;
位图colorpick;
位图刷;
位图brushcolor;
位图火炬;
Map.Entry的< CreatorBlock,点> currentBlock;
Map.Entry的< CreatorBlock,点> lastBlock;
地图< CreatorBlock,点> grassblock =新的HashMap< CreatorBlock,点>();
地图< CreatorBlock,点> stonegrassblock =新的HashMap< CreatorBlock,点>();
地图< CreatorBlock,点> dirtblock =新的HashMap< CreatorBlock,点>();
地图< CreatorBlock,点> stoneblock =新的HashMap< CreatorBlock,点>();
地图< CreatorBlock,点> grassSideBlock =新的HashMap< CreatorBlock,点>();
地图< CreatorBlock,点> grassTopBlock =新的HashMap< CreatorBlock,点>();
地图< CreatorBlock,点> orangeBlock =新的HashMap< CreatorBlock,点>();
地图< CreatorBlock,点> blueBlock =新的HashMap< CreatorBlock,点>();
地图< BackBlock,点> mountaintopBack =新的HashMap< BackBlock,点>();
地图< BackBlock,点> mountainbottomBack =新的HashMap< BackBlock,点>();
地图< BackBlock,点> torchBack =新的HashMap< BackBlock,点>();
地图< CreatorBlock,点> levelMap =新的HashMap< CreatorBlock,点>();
名单<菜单按钮> menuButtonList =新的ArrayList<菜单按钮>();
公共CreatorView(上下文C){
超级(C);
this.c = C;
窗口管理WM =(窗口管理器)c.getSystemService(Context.WINDOW_SERVICE);
显示显示= wm.getDefaultDisplay();
this.screenw = display.getWidth();
this.screenh = display.getHeight();
this.PixelDetect = BitmapFactory.de codeResource(getResources(),R.drawable.custom_pixel);
this.smallpixel = Bitmap.createScaledBitmap(PixelDetect,3,3,FALSE);
this.grass = BitmapFactory.de codeResource(getResources(),R.drawable.block_grass);
this.grassSide = BitmapFactory.de codeResource(getResources(),R.drawable.block_grassside);
this.grassTop = BitmapFactory.de codeResource(getResources(),R.drawable.block_grasstop);
this.orange = BitmapFactory.de codeResource(getResources(),R.drawable.block_cube1);
this.blue = BitmapFactory.de codeResource(getResources(),R.drawable.block_bluecube);
this.dirt = BitmapFactory.de codeResource(getResources(),R.drawable.block_dirt);
this.dirt2 = BitmapFactory.de codeResource(getResources(),R.drawable.block_dirt2);
this.dirt3 = BitmapFactory.de codeResource(getResources(),R.drawable.block_dirt3);
this.stonegrass = BitmapFactory.de codeResource(getResources(),R.drawable.block_stonegrass);
this.stone = BitmapFactory.de codeResource(getResources(),R.drawable.block_stone);
this.stone2 = BitmapFactory.de codeResource(getResources(),R.drawable.block_stone2);
this.stone3 = BitmapFactory.de codeResource(getResources(),R.drawable.block_stone3);
this.stone4 = BitmapFactory.de codeResource(getResources(),R.drawable.block_stone4);
this.mountaintop = BitmapFactory.de codeResource(getResources(),R.drawable.back_mountaintop);
this.mountainbottom = BitmapFactory.de codeResource(getResources(),R.drawable.back_mountainbottom);
this.arrowno = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_noclick);
this.arrown = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_normal);
this.arrowl = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_left);
this.arrowr = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_right);
this.arrowu = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_up);
this.arrowd = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_down);
this.arrowul = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_upperleft);
this.arrowur = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_upperright);
this.arrowdl = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_downleft);
this.arrowdr = BitmapFactory.de codeResource(getResources(),R.drawable.arrow_downright);
this.arrowno = Bitmap.createScaledBitmap(arrowno,arrowno.getWidth()* 3,arrowno.getHeight()* 3,FALSE);
this.save = BitmapFactory.de codeResource(getResources(),R.drawable.button_save);
this.brush = BitmapFactory.de codeResource(getResources(),R.drawable.menu_brush);
this.brushcolor = BitmapFactory.de codeResource(getResources(),R.drawable.menu_brush_color);
this.colorpick = BitmapFactory.de codeResource(getResources(),R.drawable.menu_colorpicker);
this.torch = BitmapFactory.de codeResource(getResources(),R.drawable.item_torch);
this.save = BitmapFactory.de codeResource(getResources(),R.drawable.button_save);
this.fliph = BitmapFactory.de codeResource(getResources(),R.drawable.menu_fliph);
this.flipv = BitmapFactory.de codeResource(getResources(),R.drawable.menu_flipv);
this.Rotatef = BitmapFactory.de codeResource(getResources(),R.drawable.menu_rotatef);
this.Rotateb = BitmapFactory.de codeResource(getResources(),R.drawable.menu_rotateb);
this.bin_Empty = BitmapFactory.de codeResource(getResources(),R.drawable.bin_empty);
this.bin_Full = BitmapFactory.de codeResource(getResources(),R.drawable.bin_full);
this.bin_Empty = Bitmap.createScaledBitmap(bin_Empty,bin_Empty.getWidth()* 3,bin_Empty.getHeight()* 3,FALSE);
this.bin_Full = Bitmap.createScaledBitmap(bin_Full,bin_Full.getWidth()* 3,bin_Full.getHeight()* 3,FALSE);
this.brush = Bitmap.createScaledBitmap(刷,brush.getWidth()* 3,brush.getHeight()* 3,FALSE);
this.brushcolor = Bitmap.createScaledBitmap(brushcolor,brushcolor.getWidth()* 3,brushcolor.getHeight()* 3,FALSE);
this.colorpick = Bitmap.createScaledBitmap(colorpick,colorpick.getWidth()* 3,colorpick.getHeight()* 3,FALSE);
this.fliph = Bitmap.createScaledBitmap(fliph,fliph.getWidth()* 3,fliph.getHeight()* 3,FALSE);
this.flipv = Bitmap.createScaledBitmap(flipv,flipv.getWidth()* 3,flipv.getHeight()* 3,FALSE);
this.Rotateb = Bitmap.createScaledBitmap(Rotateb,Rotateb.getWidth()* 3,Rotateb.getHeight()* 3,FALSE);
this.Rotatef = Bitmap.createScaledBitmap(Rotatef,Rotatef.getWidth()* 3,Rotatef.getHeight()* 3,FALSE);
this.arrown = Bitmap.createScaledBitmap(arrown,arrown.getWidth()* 3,arrown.getHeight()* 3,FALSE);
this.arrowl = Bitmap.createScaledBitmap(arrowl,arrowl.getWidth()* 3,arrowl.getHeight()* 3,FALSE);
this.arrowr = Bitmap.createScaledBitmap(arrowr,arrowr.getWidth()* 3,arrowr.getHeight()* 3,FALSE);
this.arrowu = Bitmap.createScaledBitmap(arrowu,arrowu.getWidth()* 3,arrowu.getHeight()* 3,FALSE);
this.arrowd = Bitmap.createScaledBitmap(arrowd,arrowd.getWidth()* 3,arrowd.getHeight()* 3,FALSE);
this.arrowul = Bitmap.createScaledBitmap(arrowul,arrowul.getWidth()* 3,arrowul.getHeight()* 3,FALSE);
this.arrowur = Bitmap.createScaledBitmap(arrowur,arrowur.getWidth()* 3,arrowur.getHeight()* 3,FALSE);
this.arrowdl = Bitmap.createScaledBitmap(arrowdl,arrowdl.getWidth()* 3,arrowdl.getHeight()* 3,FALSE);
this.arrowdr = Bitmap.createScaledBitmap(arrowdr,arrowdr.getWidth()* 3,arrowdr.getHeight()* 3,FALSE);
Menu_Add(arrowno,0,真正的箭头);
Menu_Add(bin_Empty,1,假的,本);
Menu_Add(刷,2,假的,刷);
Menu_Add(brushcolor,2,假的,brushcolor);
Menu_Add(colorpick,3,假的,colorpick);
Menu_Add(Rotateb,4,假的,rotateb);
Menu_Add(Rotatef,5,假的,rotatef);
Menu_Add(fliph,6,假的,fliph);
Menu_Add(flipv,7,假的,flipv);
Menu_Add(grassTop,1,真正的grasstop);
Menu_Add(grassSide,2,真的,grassside);
Menu_Add(草,3,真正的草);
Menu_Add(污垢,4,真正的污垢);
Menu_Add(stonegrass,5,真正的stonegrass);
Menu_Add(石,6,真正的石头);
Menu_Add(橙色,7,真的,橙色);
Menu_Add(蓝色,8,真正的蓝);
Menu_Add(山顶,9,真正的山顶);
Menu_Add(mountainbottom,10,真正的mountainbottom);
Menu_Add(火炬,11,真正的火炬);
arrowsp =新的点();
arrowsp.x = 0;
arrowsp.y = 0;
tileBitmap =草;
}
私人无效Menu_Add(位图B,INT秩序,布尔垂直字符串名称)
{
点P =新的点();
如果(为了== 0){
p.x = 0;
p.y = 0;
菜单按钮M =新的菜单按钮(秩序,B,垂直,P,姓名);
menuButtonList.add(米);
}
其他{
对于(菜单按钮M:menuButtonList){
如果((m.isVertical()==垂直||顺序== 1)及;&安培; m.getOrder()+ 1 ==顺序){
如果(垂直){
p.x = 0;
p.y = m.getP()Y + m.getBit()的getHeight()+ 2。
}
其他{
p.x = m.getP()X + m.getBit()的getWidth()+ 2。
p.y = 0;
}
菜单按钮M2 =新的菜单按钮(秩序,B,垂直,P,姓名);
menuButtonList.add(平方米);
返回;
}
}
}
}
公共无效drawLight(){
lightBitmap = Bitmap.createBitmap(1500,15000,Bitmap.Config.ARGB_8888);
帆布CC =新的Canvas(lightBitmap);
油漆PP =新的油漆(Paint.ANTI_ALIAS_FLAG);
pp.setMaskFilter(新BlurMaskFilter(20,BlurMaskFilter.Blur.NORMAL));
对于(Map.Entry的< BackBlock,点>输入:torchBack.entrySet()){
cc.drawCircle(entry.getValue()X + 6,entry.getValue()Y + 55,第25,第。);
}
lightRect =新RectF(-256,-256,lightBitmap.getWidth(),lightBitmap.getHeight());
lightRect.offset(200,200);
浮动[]数组= {
1.2F,0,0,0,1,
0,1.2f,0,0,1,
0,0,1.2F,0,1,
0,0,0,1,0,
};
嘉洛斯CCC =新嘉洛斯(阵列);
ccc.setScale(2,1.5F,1F,1F);
ColorMatrixColorFilter C4 =新ColorMatrixColorFilter(CCC);
paint0.setColorFilter(C4);
paint1.setXfermode(新PorterDuffXfermode(PorterDuff.Mode.DST_IN));
}
@覆盖
保护无效的OnDraw(帆布油画){
super.onDraw(画布);
drawLight();
油漆paintAlpha =新的油漆();
paintAlpha.setAlpha(200);
canvas.drawARGB(255,86,194,243);
drawTiles(帆布,paint0);
drawTiles(帆布,NULL);
对于(菜单按钮M:menuButtonList){
开关(m.getName()){
案斌:
如果(bin_isEmpty){
canvas.drawBitmap(。bin_Empty,m.getP()X,m.getP()Y,paintAlpha);
}
其他{
canvas.drawBitmap(。bin_Full,m.getP()X,m.getP()Y,paintAlpha);
}
打破;
案brushcolor:
canvas.drawBitmap(m.getBit(),m.getP()的x,m.getP()Y,changeBitmapColor(m.getBit(),currentColor));
打破;
案箭:
canvas.drawBitmap(m.getBit(),m.getP()的x,m.getP()y的,paintAlpha);
开关(arrowcheck){
案正常:
canvas.drawBitmap(arrown,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案左:
canvas.drawBitmap(arrowl,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案右:
canvas.drawBitmap(arrowr,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案下:
canvas.drawBitmap(arrowd,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案涨:
canvas.drawBitmap(arrowu,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案UPLEFT:
canvas.drawBitmap(arrowul,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案正直:
canvas.drawBitmap(arrowur,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案DOWNLEFT:
canvas.drawBitmap(arrowdl,arrowsp.x,arrowsp.y,paintAlpha);
打破;
案难搞:
canvas.drawBitmap(arrowdr,arrowsp.x,arrowsp.y,paintAlpha);
打破;
}
打破;
默认:
canvas.drawBitmap(m.getBit(),m.getP()的x,m.getP()y的,paintAlpha);
打破;
}
油漆paintRec =新的油漆();
paintRec.setColor(Color.RED);
paintRec.setStyle(Style.STROKE);
paintRec.setStrokeWidth(4);
paintRec.setStrokeCap(Cap.ROUND);
paintRec.setStrokeJoin(Join.ROUND);
paintRec.setPathEffect(新DashPathEffect(新浮法[] {} 30,40,0));
paintRec.setAlpha(5);
如果(currentBlock!= NULL)
canvas.drawRect(currentBlock.getValue().x,currentBlock.getValue().y,currentBlock.getValue().x+currentBlock.getKey().getBit().getWidth(),currentBlock.getValue().y+currentBlock.getKey().getBit().getHeight(),paintRec);
}
canvas.saveLayer(lightRect,空,Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
canvas.cli preCT(lightRect);
drawTiles(帆布,paint0);
canvas.drawBitmap(lightBitmap,空,lightRect,paint1);
canvas.restore();
}
无效drawTiles(画布油画,涂料P){
对于(Map.Entry的< BackBlock,点>输入:mountainbottomBack.entrySet()){
//位图减仓= Bitmap.createScaledBitmap(entry.getKey()GETBIT(),entry.getKey()GETBIT()的getWidth(),entry.getKey()GETBIT()的getHeight(),假的。。。);
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< BackBlock,点>输入:mountaintopBack.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:grassblock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:stonegrassblock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:dirtblock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:stoneblock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:grassSideBlock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:grassTopBlock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:orangeBlock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< CreatorBlock,点>输入:blueBlock.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
对于(Map.Entry的< BackBlock,点>输入:torchBack.entrySet()){
canvas.drawBitmap(entry.getKey()GETBIT(),entry.getValue()的x,entry.getValue()y的,第。);
}
}
使用自定义的视图,使其更黄见浮法[]数组初始化的注释:
V类扩展视图{
涂料paint0;
涂料paint1;
公共V(上下文的背景下){
超(上下文);
setLayerType(View.LAYER_TYPE_SOFTWARE,NULL);
paint0 =新的油漆();
点阵位图= BitmapFactory.de codeResource(getResources(),R.drawable.fykgf);
着色的着色器=新BitmapShader(位图,Shader.TileMode.REPEAT,Shader.TileMode.REPEAT);
paint0.setShader(着色);
paint1 =新的油漆();
paint1.setMaskFilter(新BlurMaskFilter(50,BlurMaskFilter.Blur.NORMAL));
浮动[]数组= {
2,0,0,0,0,
0,2,0,0,0,
0,0,2,0,0,//改变2:之间[1..2]东西让它更黄
0,0,0,1,0,
};
paint1.setColorFilter(新ColorMatrixColorFilter(阵列));
paint1.setShader(着色);
}
@覆盖
保护无效的OnDraw(帆布油画){
canvas.drawRect(0,0,的getWidth(),的getHeight(),paint0);
canvas.drawCircle(300,300,150,paint1);
}
}
修改
如果你想几个 Bitmapts
来绘制用:
V类扩展视图{
位图tileBitmap;
位图lightBitmap;
RectF lightRect;
油漆paint0 =新的油漆(Paint.ANTI_ALIAS_FLAG);
油漆paint1 =新的油漆(Paint.ANTI_ALIAS_FLAG);
公共V(上下文的背景下){
超(上下文);
// setLayerType(View.LAYER_TYPE_SOFTWARE,NULL);
tileBitmap = BitmapFactory.de codeResource(getResources(),R.drawable.fykgf);
lightBitmap = Bitmap.createBitmap(256,256,Bitmap.Config.ARGB_8888);
帆布C =新的Canvas(lightBitmap);
涂料P =新的油漆(Paint.ANTI_ALIAS_FLAG);
p.setMaskFilter(新BlurMaskFilter(20,BlurMaskFilter.Blur.NORMAL));
c.drawCircle(128,128,100,p)的;
lightRect =新RectF(0,0,lightBitmap.getWidth(),lightBitmap.getHeight());
lightRect.offset(200,200);
浮动[]数组= {
4,0,0,0,0,
0,4,0,0,0,
0,0,0,0,0,
0,0,0,1,0,
};
paint0.setColorFilter(新ColorMatrixColorFilter(阵列));
paint1.setXfermode(新PorterDuffXfermode(PorterDuff.Mode.DST_IN));
}
@覆盖
保护无效的OnDraw(帆布油画){
drawTiles(帆布,NULL);
canvas.saveLayer(lightRect,空,Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
canvas.cli preCT(lightRect);
drawTiles(帆布,paint0);
canvas.drawBitmap(lightBitmap,空,lightRect,paint1);
canvas.restore();
}
无效drawTiles(画布油画,涂料P){
//绘制位图在这里...
}
}
It's a bit hard to explain my problem so i'll show it with few pictures. I made this bitmap :
and I wanted to draw a circle of light inside it, using this code:
Rect bounds1 = new Rect(x, y, x+bit.getWidth(), y+bit.getHeight());
for (int i = bounds1.left; i < bounds1.right; i++) {
for (int j = bounds1.top; j < bounds1.bottom; j++) {
int result=(int) Math.sqrt((x2-i)*(x2-i)+(y2-j)*(y2-j));
if(result<=120){
int pixel = (bit.getPixel(i-x,j-y));
int a,r, g, b;
int different=result/10;
//change the value of each component
a=Color.alpha(pixel);
r = Color.red(pixel) + rn;
g = Color.green(pixel) + gn;
b = Color.blue(pixel) + bn;
//r,g,b values which are out of the range 0 to 255 should set to 0 or 255
if (r >= 256) {
r = 255;
} else if (r < 0) {
r = 0;
}
if (g >= 256) {
g = 255;
} else if (g < 0) {
g = 0;
}
if (b >= 256) {
b = 255;
} else if (b < 0) {
b = 0;
}
bit.setPixel(i-x, j-y, Color.argb(a,r, g, b));
}
}
I managed to create this:
Now, I'm trying to make the light ball be smoother and not so rough so it wont look like a circle, anyone has any idea how can I do that? I tried many things but nothing worked out.
whole code of drawing:
public class CreatorView extends View
{
Context c;
boolean quickfix=false;
boolean bin_isEmpty=true;
boolean iftrue=false;
boolean stopnow=false;
boolean buttonpressed=false;
String arrowcheck="";
int screenw;
int screenh;
int pixelx;
int pixely;
int smallpixelx;
int smallpixely;
Point arrowsp;
Paint paintblock;
int currentColor=0;
int x2=120;
int y2=120;
int rn=60;
int gn=45;
int bn=30;
Bitmap tileBitmap;
Bitmap lightBitmap;
RectF lightRect;
Paint paint0 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
Bitmap mountaintop;
Bitmap mountainbottom;
Bitmap grass;
Bitmap dirt;
Bitmap dirt2;
Bitmap dirt3;
Bitmap stonegrass;
Bitmap stone;
Bitmap stone2;
Bitmap stone3;
Bitmap stone4;
Bitmap cloud;
Bitmap bin_Empty;
Bitmap bin_Full;
Bitmap arrowno;
Bitmap arrown;
Bitmap arrowl;
Bitmap arrowr;
Bitmap arrowu;
Bitmap arrowd;
Bitmap arrowul;
Bitmap arrowur;
Bitmap save;
Bitmap fliph;
Bitmap flipv;
Bitmap Rotatef;
Bitmap Rotateb;
Bitmap arrowdl;
Bitmap arrowdr;
Bitmap grassSide;
Bitmap grassTop;
Bitmap orange;
Bitmap blue;
Bitmap smallpixel;
Bitmap PixelDetect;
Bitmap colorpick;
Bitmap brush;
Bitmap brushcolor;
Bitmap torch;
Map.Entry<CreatorBlock,Point>currentBlock;
Map.Entry<CreatorBlock,Point>lastBlock;
Map<CreatorBlock, Point> grassblock = new HashMap<CreatorBlock, Point>();
Map<CreatorBlock, Point> stonegrassblock = new HashMap<CreatorBlock, Point>();
Map<CreatorBlock, Point> dirtblock = new HashMap<CreatorBlock, Point>();
Map<CreatorBlock, Point> stoneblock = new HashMap<CreatorBlock, Point>();
Map<CreatorBlock, Point> grassSideBlock = new HashMap<CreatorBlock, Point>();
Map<CreatorBlock, Point> grassTopBlock = new HashMap<CreatorBlock, Point>();
Map<CreatorBlock, Point> orangeBlock = new HashMap<CreatorBlock, Point>();
Map<CreatorBlock, Point> blueBlock = new HashMap<CreatorBlock, Point>();
Map<BackBlock, Point> mountaintopBack = new HashMap<BackBlock, Point>();
Map<BackBlock, Point> mountainbottomBack = new HashMap<BackBlock, Point>();
Map<BackBlock, Point> torchBack = new HashMap<BackBlock, Point>();
Map<CreatorBlock, Point> levelMap = new HashMap<CreatorBlock, Point>();
List<MenuButton>menuButtonList=new ArrayList<MenuButton>();
public CreatorView(Context c) {
super(c);
this.c=c;
WindowManager wm = (WindowManager) c.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
this.screenw= display.getWidth();
this.screenh=display.getHeight();
this.PixelDetect = BitmapFactory.decodeResource( getResources(), R.drawable.custom_pixel);
this.smallpixel = Bitmap.createScaledBitmap(PixelDetect, 3, 3, false);
this.grass=BitmapFactory.decodeResource(getResources(), R.drawable.block_grass);
this.grassSide=BitmapFactory.decodeResource(getResources(), R.drawable.block_grassside);
this.grassTop=BitmapFactory.decodeResource(getResources(), R.drawable.block_grasstop);
this.orange=BitmapFactory.decodeResource(getResources(), R.drawable.block_cube1);
this.blue=BitmapFactory.decodeResource(getResources(), R.drawable.block_bluecube);
this.dirt=BitmapFactory.decodeResource(getResources(), R.drawable.block_dirt);
this.dirt2=BitmapFactory.decodeResource(getResources(), R.drawable.block_dirt2);
this.dirt3=BitmapFactory.decodeResource(getResources(), R.drawable.block_dirt3);
this.stonegrass=BitmapFactory.decodeResource(getResources(), R.drawable.block_stonegrass);
this.stone=BitmapFactory.decodeResource(getResources(), R.drawable.block_stone);
this.stone2=BitmapFactory.decodeResource(getResources(), R.drawable.block_stone2);
this.stone3=BitmapFactory.decodeResource(getResources(), R.drawable.block_stone3);
this.stone4=BitmapFactory.decodeResource(getResources(), R.drawable.block_stone4);
this.mountaintop=BitmapFactory.decodeResource(getResources(), R.drawable.back_mountaintop);
this.mountainbottom=BitmapFactory.decodeResource(getResources(), R.drawable.back_mountainbottom);
this.arrowno=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_noclick);
this.arrown=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_normal);
this.arrowl=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_left);
this.arrowr=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_right);
this.arrowu=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_up);
this.arrowd=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_down);
this.arrowul=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_upperleft);
this.arrowur=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_upperright);
this.arrowdl=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_downleft);
this.arrowdr=BitmapFactory.decodeResource(getResources(), R.drawable.arrow_downright);
this.arrowno=Bitmap.createScaledBitmap(arrowno, arrowno.getWidth()*3, arrowno.getHeight()*3, false);
this.save=BitmapFactory.decodeResource(getResources(), R.drawable.button_save);
this.brush=BitmapFactory.decodeResource(getResources(), R.drawable.menu_brush);
this.brushcolor=BitmapFactory.decodeResource(getResources(), R.drawable.menu_brush_color);
this.colorpick=BitmapFactory.decodeResource(getResources(), R.drawable.menu_colorpicker);
this.torch=BitmapFactory.decodeResource(getResources(), R.drawable.item_torch);
this.save=BitmapFactory.decodeResource(getResources(), R.drawable.button_save);
this.fliph=BitmapFactory.decodeResource(getResources(), R.drawable.menu_fliph);
this.flipv=BitmapFactory.decodeResource(getResources(), R.drawable.menu_flipv);
this.Rotatef=BitmapFactory.decodeResource(getResources(), R.drawable.menu_rotatef);
this.Rotateb=BitmapFactory.decodeResource(getResources(), R.drawable.menu_rotateb);
this.bin_Empty=BitmapFactory.decodeResource(getResources(), R.drawable.bin_empty);
this.bin_Full=BitmapFactory.decodeResource(getResources(), R.drawable.bin_full);
this.bin_Empty=Bitmap.createScaledBitmap(bin_Empty, bin_Empty.getWidth()*3, bin_Empty.getHeight()*3, false);
this.bin_Full=Bitmap.createScaledBitmap(bin_Full, bin_Full.getWidth()*3, bin_Full.getHeight()*3, false);
this.brush=Bitmap.createScaledBitmap(brush, brush.getWidth()*3, brush.getHeight()*3, false);
this.brushcolor=Bitmap.createScaledBitmap(brushcolor, brushcolor.getWidth()*3, brushcolor.getHeight()*3, false);
this.colorpick=Bitmap.createScaledBitmap(colorpick, colorpick.getWidth()*3, colorpick.getHeight()*3, false);
this.fliph=Bitmap.createScaledBitmap(fliph, fliph.getWidth()*3, fliph.getHeight()*3, false);
this.flipv=Bitmap.createScaledBitmap(flipv, flipv.getWidth()*3, flipv.getHeight()*3, false);
this.Rotateb=Bitmap.createScaledBitmap(Rotateb, Rotateb.getWidth()*3, Rotateb.getHeight()*3, false);
this.Rotatef=Bitmap.createScaledBitmap(Rotatef, Rotatef.getWidth()*3, Rotatef.getHeight()*3, false);
this.arrown=Bitmap.createScaledBitmap(arrown, arrown.getWidth()*3, arrown.getHeight()*3, false);
this.arrowl=Bitmap.createScaledBitmap(arrowl, arrowl.getWidth()*3, arrowl.getHeight()*3, false);
this.arrowr=Bitmap.createScaledBitmap(arrowr, arrowr.getWidth()*3, arrowr.getHeight()*3, false);
this.arrowu=Bitmap.createScaledBitmap(arrowu, arrowu.getWidth()*3, arrowu.getHeight()*3, false);
this.arrowd=Bitmap.createScaledBitmap(arrowd, arrowd.getWidth()*3, arrowd.getHeight()*3, false);
this.arrowul=Bitmap.createScaledBitmap(arrowul, arrowul.getWidth()*3, arrowul.getHeight()*3, false);
this.arrowur=Bitmap.createScaledBitmap(arrowur, arrowur.getWidth()*3, arrowur.getHeight()*3, false);
this.arrowdl=Bitmap.createScaledBitmap(arrowdl, arrowdl.getWidth()*3, arrowdl.getHeight()*3, false);
this.arrowdr=Bitmap.createScaledBitmap(arrowdr, arrowdr.getWidth()*3, arrowdr.getHeight()*3, false);
Menu_Add(arrowno,0,true,"arrows");
Menu_Add(bin_Empty,1,false,"bin");
Menu_Add(brush,2,false,"brush");
Menu_Add(brushcolor,2,false,"brushcolor");
Menu_Add(colorpick,3,false,"colorpick");
Menu_Add(Rotateb,4,false,"rotateb");
Menu_Add(Rotatef,5,false,"rotatef");
Menu_Add(fliph,6,false,"fliph");
Menu_Add(flipv,7,false,"flipv");
Menu_Add(grassTop,1,true,"grasstop");
Menu_Add(grassSide,2,true,"grassside");
Menu_Add(grass,3,true,"grass");
Menu_Add(dirt,4,true,"dirt");
Menu_Add(stonegrass,5,true,"stonegrass");
Menu_Add(stone,6,true,"stone");
Menu_Add(orange,7,true,"orange");
Menu_Add(blue,8,true,"blue");
Menu_Add(mountaintop,9,true,"mountaintop");
Menu_Add(mountainbottom,10,true,"mountainbottom");
Menu_Add(torch,11,true,"torch");
arrowsp=new Point();
arrowsp.x=0;
arrowsp.y=0;
tileBitmap = grass;
}
private void Menu_Add(Bitmap b,int order,boolean vertical,String name)
{
Point p=new Point();
if(order==0){
p.x=0;
p.y=0;
MenuButton m=new MenuButton(order,b , vertical, p,name);
menuButtonList.add(m);
}
else{
for (MenuButton m : menuButtonList) {
if((m.isVertical()==vertical||order==1)&&m.getOrder()+1==order ){
if(vertical){
p.x=0;
p.y=m.getP().y+m.getBit().getHeight()+2;
}
else{
p.x=m.getP().x+m.getBit().getWidth()+2;
p.y=0;
}
MenuButton m2=new MenuButton(order,b , vertical, p,name);
menuButtonList.add(m2);
return;
}
}
}
}
public void drawLight(){
lightBitmap = Bitmap.createBitmap(1500, 15000, Bitmap.Config.ARGB_8888);
Canvas cc = new Canvas(lightBitmap);
Paint pp = new Paint(Paint.ANTI_ALIAS_FLAG);
pp.setMaskFilter(new BlurMaskFilter(20, BlurMaskFilter.Blur.NORMAL));
for (Map.Entry<BackBlock, Point> entry : torchBack.entrySet()) {
cc.drawCircle(entry.getValue().x+6, entry.getValue().y+55, 25, pp);
}
lightRect = new RectF(-256, -256, lightBitmap.getWidth(), lightBitmap.getHeight());
lightRect.offset(200, 200);
float[] array = {
1.2f, 0, 0, 0, 1,
0,1.2f, 0, 0, 1,
0, 0, 1.2f, 0, 1,
0, 0, 0, 1, 0,
};
ColorMatrix ccc=new ColorMatrix(array);
ccc.setScale(2, 1.5f, 1f, 1f);
ColorMatrixColorFilter c4=new ColorMatrixColorFilter(ccc);
paint0.setColorFilter(c4);
paint1.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawLight();
Paint paintAlpha = new Paint();
paintAlpha.setAlpha(200);
canvas.drawARGB(255, 86, 194, 243);
drawTiles(canvas, paint0);
drawTiles(canvas, null);
for(MenuButton m : menuButtonList){
switch(m.getName()){
case "bin":
if(bin_isEmpty){
canvas.drawBitmap(bin_Empty, m.getP().x, m.getP().y,paintAlpha);
}
else{
canvas.drawBitmap(bin_Full, m.getP().x, m.getP().y,paintAlpha);
}
break;
case "brushcolor":
canvas.drawBitmap(m.getBit(), m.getP().x,m.getP().y, changeBitmapColor(m.getBit(), currentColor));
break;
case "arrows":
canvas.drawBitmap(m.getBit(),m.getP().x,m.getP().y,paintAlpha);
switch (arrowcheck) {
case "normal":
canvas.drawBitmap(arrown, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "left":
canvas.drawBitmap(arrowl, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "right":
canvas.drawBitmap(arrowr, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "down":
canvas.drawBitmap(arrowd, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "up":
canvas.drawBitmap(arrowu, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "upleft":
canvas.drawBitmap(arrowul, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "upright":
canvas.drawBitmap(arrowur, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "downleft":
canvas.drawBitmap(arrowdl, arrowsp.x, arrowsp.y,paintAlpha);
break;
case "downright":
canvas.drawBitmap(arrowdr, arrowsp.x, arrowsp.y,paintAlpha);
break;
}
break;
default:
canvas.drawBitmap(m.getBit(),m.getP().x,m.getP().y,paintAlpha);
break;
}
Paint paintRec = new Paint();
paintRec.setColor(Color.RED);
paintRec.setStyle(Style.STROKE);
paintRec.setStrokeWidth(4);
paintRec.setStrokeCap(Cap.ROUND);
paintRec.setStrokeJoin(Join.ROUND);
paintRec.setPathEffect(new DashPathEffect(new float[] {30,40}, 0));
paintRec.setAlpha(5);
if(currentBlock!=null)
canvas.drawRect(currentBlock.getValue().x,currentBlock.getValue().y,currentBlock.getValue().x+currentBlock.getKey().getBit().getWidth(),currentBlock.getValue().y+currentBlock.getKey().getBit().getHeight(),paintRec);
}
canvas.saveLayer(lightRect, null, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
canvas.clipRect(lightRect);
drawTiles(canvas, paint0);
canvas.drawBitmap(lightBitmap, null, lightRect, paint1);
canvas.restore();
}
void drawTiles(Canvas canvas, Paint p) {
for (Map.Entry<BackBlock, Point> entry : mountainbottomBack.entrySet()) {
//Bitmap lighten=Bitmap.createScaledBitmap(entry.getKey().getBit(), entry.getKey().getBit().getWidth(), entry.getKey().getBit().getHeight(), false);
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<BackBlock, Point> entry : mountaintopBack.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : grassblock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : stonegrassblock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : dirtblock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : stoneblock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : grassSideBlock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : grassTopBlock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : orangeBlock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<CreatorBlock, Point> entry : blueBlock.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
for (Map.Entry<BackBlock, Point> entry : torchBack.entrySet()) {
canvas.drawBitmap(entry.getKey().getBit(), entry.getValue().x,entry.getValue().y, p);
}
}
use this custom View, to make it more yellow see the comment in float[] array initialization:
class V extends View {
Paint paint0;
Paint paint1;
public V(Context context) {
super(context);
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
paint0 = new Paint();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.fykgf);
Shader shader = new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
paint0.setShader(shader);
paint1 = new Paint();
paint1.setMaskFilter(new BlurMaskFilter(50, BlurMaskFilter.Blur.NORMAL));
float[] array = {
2, 0, 0, 0, 0,
0, 2, 0, 0, 0,
0, 0, 2, 0, 0, // change 2 to: something between [1..2] to get it more yellow
0, 0, 0, 1, 0,
};
paint1.setColorFilter(new ColorMatrixColorFilter(array));
paint1.setShader(shader);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(0, 0, getWidth(), getHeight(), paint0);
canvas.drawCircle(300, 300, 150, paint1);
}
}
EDIT
if you want several Bitmapts
to be drawn use this:
class V extends View {
Bitmap tileBitmap;
Bitmap lightBitmap;
RectF lightRect;
Paint paint0 = new Paint(Paint.ANTI_ALIAS_FLAG);
Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
public V(Context context) {
super(context);
// setLayerType(View.LAYER_TYPE_SOFTWARE, null);
tileBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.fykgf);
lightBitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(lightBitmap);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setMaskFilter(new BlurMaskFilter(20, BlurMaskFilter.Blur.NORMAL));
c.drawCircle(128, 128, 100, p);
lightRect = new RectF(0, 0, lightBitmap.getWidth(), lightBitmap.getHeight());
lightRect.offset(200, 200);
float[] array = {
4, 0, 0, 0, 0,
0, 4, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 1, 0,
};
paint0.setColorFilter(new ColorMatrixColorFilter(array));
paint1.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
}
@Override
protected void onDraw(Canvas canvas) {
drawTiles(canvas, null);
canvas.saveLayer(lightRect, null, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
canvas.clipRect(lightRect);
drawTiles(canvas, paint0);
canvas.drawBitmap(lightBitmap, null, lightRect, paint1);
canvas.restore();
}
void drawTiles(Canvas canvas, Paint p) {
// draw your Bitmaps here...
}
}
这篇关于Android的颜色更顺畅的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!