歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android實現圖片按任意路徑截取

Android實現圖片按任意路徑截取

日期:2017/3/1 10:10:12   编辑:Linux編程

使用 Android提供的Path實現圖片的截取,重寫View的onTouchEvent方法和onDraw方法,onTouchEvent負責實現截取路徑的構件,onDraw進行刷新頁面,重寫View類的代碼如下 :

  1. public class MyView extends View {
  2. private Drawable mDrawable;
  3. private Path mPath;
  4. private float mX = -1;
  5. private float mY = -1;
  6. private float mPastX;
  7. private float mPastY;
  8. public MyView(Context context) {
  9. super(context);
  10. // TODO Auto-generated constructor stub
  11. mPath = new Path();
  12. }
  13. public void setDrawable(Drawable pDrawable){
  14. mDrawable = pDrawable;
  15. }
  16. @Override
  17. protected void onDraw(Canvas canvas) {
  18. // TODO Auto-generated method stub
  19. super.onDraw(canvas);
  20. Log.i("xiao", "onDraw");
  21. mDrawable.setBounds(0, 0, getWidth(), getHeight());
  22. Rect lRect = mDrawable.getBounds();
  23. Log.i("xiao", "lRect.left = " + lRect.left + " top = " + lRect.top + " right = " + lRect.right + " bottom = " + lRect.bottom);
  24. if(!mPath.isEmpty()){
  25. Log.i("xiao", "!mPath.isEmpty()");
  26. canvas.clipPath(mPath);
  27. //mDrawable.draw(canvas);
  28. }
  29. mDrawable.draw(canvas);
  30. }
  31. @Override
  32. public boolean onTouchEvent(MotionEvent event) {
  33. // TODO Auto-generated method stub
  34. Log.i("xiao", "onTouchEvent");
  35. int lAction = event.getAction();
  36. if(mX != -1){
  37. mPastX = mX;
  38. mPastY = mY;
  39. }
  40. mX = event.getX();
  41. mY = event.getY();
  42. switch(lAction){
  43. case MotionEvent.ACTION_DOWN:
  44. mPath.reset();
  45. mPath.moveTo(mX, mY);
  46. break;
  47. case MotionEvent.ACTION_MOVE:
  48. mPath.quadTo(mPastX, mPastY, (mX + mPastX) / 2, (mY + mPastY) / 2);
  49. break;
  50. case MotionEvent.ACTION_UP:
  51. mPath.lineTo(mX, mY);
  52. mX = -1;
  53. mY = -1;
  54. invalidate();
  55. break;
  56. default:
  57. break;
  58. }
  59. return true;
  60. }
  61. }

Activity主要負責獲取和設置Drawable和設置布局,代碼如下:

  1. private MyView mView;
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. mView = new MyView(this);
  6. mView.setDrawable(this.getResources().getDrawable(R.drawable.test1));
  7. this.setContentView(mView);
  8. }

未截取時效果:

畫一個路徑截取效果圖:

Android實現圖片按任意路徑截取源碼下載地址:

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/9月/13日/Android實現圖片按任意路徑截取

Copyright © Linux教程網 All Rights Reserved