本文参考文献:《疯狂Android讲义(第2版)》

自定义视图:

package com.toby.personal.testlistview;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.MaskFilter;import android.graphics.Paint;import android.graphics.Path;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by toby on 2017/4/10. */public class DrawView extends View {    private final static int VIEW_WIDTH = 720;    private final static int VIEW_HEIGHT = 1280;    private float preX;    private float preY;    private Path path;    private Paint paint = null;    private Paint bmpPaint = null;    private Bitmap cacheBitmap = null;    private Canvas cacheCanvas = null;    public DrawView(Context context, @Nullable AttributeSet attrs) {        super(context, attrs);        cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT, Bitmap.Config.ARGB_8888);        cacheCanvas = new Canvas();        path = new Path();        cacheCanvas.setBitmap(cacheBitmap);        paint = new Paint(Paint.DITHER_FLAG);        paint.setColor(Color.RED);        paint.setStyle(Paint.Style.STROKE);        paint.setStrokeWidth(1);        paint.setAntiAlias(true);        paint.setDither(true);        bmpPaint = new Paint();    }    @Override    public boolean onTouchEvent(MotionEvent event) {        float x = event.getX();        float y = event.getY();        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                path.moveTo(x, y);                preX = x;                preY = y;                break;            case MotionEvent.ACTION_MOVE:                path.quadTo(preX, preY, x, y);                preX = x;                preY = y;                break;            case MotionEvent.ACTION_UP:                cacheCanvas.drawPath(path, paint);                path.reset();                break;        }        invalidate();        return true;    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);        canvas.drawPath(path, paint);    }    public void setColor(int color){        paint.setColor(color);    }    public void setStrokeWidth(float width){        paint.setStrokeWidth(width);    }    public void setMaskFilter(MaskFilter maskFilter){        paint.setMaskFilter(maskFilter);    }}

自定义 menu 资源文件:

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                        

主布局文件的内容:

<?xml version="1.0" encoding="utf-8"?>    

主程序文件的内容:

package com.toby.personal.testlistview;import android.graphics.BlurMaskFilter;import android.graphics.Color;import android.graphics.EmbossMaskFilter;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;public class MainActivity extends AppCompatActivity {    final private static String TAG = "Toby_Test";    EmbossMaskFilter emboss;    BlurMaskFilter blur;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        emboss = new EmbossMaskFilter(new float[]{1.5f, 1.5f, 1.5f}, 0.6f, 6, 4.2f);        blur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        MenuInflater inflater = new MenuInflater(this);        inflater.inflate(R.menu.test_menu01, menu);        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        DrawView drawView = (DrawView) findViewById(R.id.drawView);        switch (item.getItemId()){            case R.id.red:                drawView.setColor(Color.RED);                item.setChecked(true);                break;            case R.id.green:                drawView.setColor(Color.GREEN);                item.setChecked(true);                break;            case R.id.blue:                drawView.setColor(Color.BLUE);                item.setChecked(true);                break;            case R.id.width_1:                drawView.setStrokeWidth(1);                break;            case R.id.width_3:                drawView.setStrokeWidth(3);                break;            case R.id.width_5:                drawView.setStrokeWidth(5);                break;            case R.id.blur:                drawView.setMaskFilter(blur);                break;            case R.id.emboss:                drawView.setMaskFilter(emboss);                break;        }        return true;    }}

运行效果:

显示效果

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android——SimpleExpandableListAdapter(收集)
  4. 关于havlenapetr-FFMpeg在Android(安卓)4.0(ICS)的补充说明
  5. android 获取服务器json数据
  6. android调用本地录制程序获取录制文件路径的问题
  7. [Linux] 批量查看Android应用程序的文件名称;
  8. android清除缓存并获取大小
  9. 【Android】利用广播Broadcast接收SMS短信

随机推荐

  1. Android(安卓)RxJava操作符详解系列: 变换
  2. 观察者模式(Observer)在Android中的应用:
  3. Android(安卓)App 中简易的网络数据处理
  4. Android底层库和程序
  5. Android基站定位——三基站(多基站)定位(三)
  6. Android(安卓)平台特性
  7. android之复选框点击事件(掌握CheckBox复
  8. android NDK 和android,mk文件 认知
  9. Android使用高德和风天气Sdk获取定位实况
  10. Android(安卓)Q 适配