android shader大全,android开发笔记(五)Shader的应用

a4c26d1e5885305701be709a3d33442f.png

package com.blog.video;

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.BitmapShader;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.ComposeShader;

import android.graphics.LinearGradient;

import android.graphics.Paint;

import android.graphics.PorterDuff;

import android.graphics.RadialGradient;

import android.graphics.Shader;

import android.graphics.Shader.TileMode;

import android.graphics.SweepGradient;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.View;

public class VideoActivity extends Activity {

@Override

public void

onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

MyView mView=new MyView(this);

setContentView(mView);

}

class MyView

extends View{

private Bitmap bm;

private Shader bitmapShader;

private Shader linearGradient;

private Shader radialGradient;

private Shader sweepGradient;

private Shader composeShader;

private int[] colors;

private Paint paint;

private boolean isFirst=true;

public MyView(Context

context) {

super(context);

bm=BitmapFactory.decodeResource(getResources(),

R.drawable.img6);

paint=new

Paint();

colors=new

int[]{Color.RED,Color.GREEN,Color.BLUE};

bitmapShader=new

BitmapShader(bm, TileMode.REPEAT, TileMode.MIRROR);

linearGradient=new

LinearGradient(0, 0, 100, 100, colors, null,

TileMode.REPEAT);

radialGradient=new

RadialGradient(100, 100, 80, colors, null, TileMode.REPEAT);

sweepGradient=new

SweepGradient(200, 200, colors, null);

composeShader=new

ComposeShader(linearGradient, radialGradient,

PorterDuff.Mode.DARKEN);

setFocusable(true);

}

@Override

protected void onDraw(Canvas

canvas) {

super.onDraw(canvas);

if(isFirst){

String

content="press up/down/left/right/middle to draw rectangle";

paint.setColor(Color.BLUE);

canvas.drawText(content,0,content.length()-1,20,20,paint);

}else{

canvas.drawRect(0,

0, getWidth(),this.getHeight(), paint);

}

}

@Override

public boolean onKeyDown(int

keyCode, KeyEvent event) {

isFirst=false;

if(keyCode==KeyEvent.KEYCODE_DPAD_UP){

paint.setShader(bitmapShader);

}

if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN){

paint.setShader(linearGradient);

}

if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT){

paint.setShader(radialGradient);

}

if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT){

paint.setShader(sweepGradient);

}

if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){

paint.setShader(composeShader);

}

postInvalidate();

return

super.onKeyDown(keyCode, event);

}  }

}

结果截图:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值