我的安卓回顾之旅:安卓自定义view 的练习
2016-03-03 22:51
302 查看
回顾:安卓自定义view 的练习
学习安卓一年多了,最近重新做了一下自定义view的练习直接贴代码:
首先是我们自定义的View类
[code]package example.jamase.drawbor; import android.app.Notification; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.view.MotionEvent; import android.view.View; /** * Created by jamase on 2016/3/3. */ public class Drawview extends View { float prex; float prey; private Path path; public Paint paint = null; Bitmap cacheBitmap = null; Canvas cacheCanvas = null; public Drawview(Context context, int width, int hight) { super(context); cacheBitmap = Bitmap.createBitmap(width, hight, Bitmap.Config.ARGB_8888); cacheCanvas = new Canvas(); paint = new Paint(Paint.DITHER_FLAG); path = new Path(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(1); paint.setAntiAlias(true); paint.setDither(true); } @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); prey = x; prey = y; break; case MotionEvent.ACTION_UP: cacheCanvas.drawPath(path, paint); path.reset(); break; } invalidate(); return true; } @Override protected void onDraw(Canvas canvas) { Paint bitPaint = new Paint(); canvas.drawBitmap(cacheBitmap, 0, 0, bitPaint); canvas.drawPath(path, paint); } }
然后是我们的MainActivity:
[code]package example.jamase.drawbor; import android.app.Activity; import android.graphics.BlurMaskFilter; import android.graphics.Color; import android.graphics.EmbossMaskFilter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.LinearLayout; public class MainActivity extends Activity { EmbossMaskFilter emboss; BlurMaskFilter blur; Drawview drawview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout Line = new LinearLayout(this); DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics); drawview = new Drawview(this, displayMetrics.widthPixels, displayMetrics.heightPixels); Line.addView(drawview); setContentView(Line); 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.menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.red: drawview.paint.setColor(Color.RED); item.setCheckable(true); break; case R.id.green: drawview.paint.setColor(Color.GREEN); item.setCheckable(true); break; case R.id.blue: drawview.paint.setColor(Color.BLUE); item.setCheckable(true); break; case R.id.width1: drawview.paint.setStrokeWidth(1); break; case R.id.width2: drawview.paint.setStrokeWidth(3); break; case R.id.width3: drawview.paint.setStrokeWidth(5); break; case R.id.blur: drawview.paint.setMaskFilter(blur); break; case R.id.emboss: drawview.paint.setMaskFilter(emboss); break; } return true; } }
这个自定义画板目前只有有限的功能,有兴趣的朋友可以自己尝试为它增加一些功能。
对应资源下载:http://download.csdn.net/detail/u012608587/9458379
本文原创,转载请注明出处,谢谢!
相关文章推荐
- 接口回调在fragment中的使用
- sql server 触发器
- 移动端前端框架UI库(Frozen UI、WeUI、SUI Mobile)
- 使用Ida 4000 动态调试Android 中的so文件的方式以及技巧
- jQuery学习笔记02
- 基于注解配置的springMVC小案例
- 安装配置PHP Apachec 错误处理
- shell 控制输出格式 echo printf
- ORACLE 12c 固定表2
- ORACLE 12c 固定表1
- ORACLE 12c 所有latch name
- Android 6.0 权限管理(permission)
- Sql去重及查询重复
- bootstrap精简教程
- LNMP第二部分nginx、php配置
- ORACLE 12c 支持的hint 命令
- 关于final
- scala的type alias特性
- bzoj 1191: [HNOI2006]超级英雄Hero
- 传值方式(block, 属性,代理 ,单例)