精华内容
下载资源
问答
  • 刚在看自定义View的知识点时,突然想起来,如果CardView宽高相等,CardView设置圆角的半径为宽高的一半时,不就是一个圆形嘛?! 1.布局文件 <android.support.v7.widget.CardView android:id=@+id/cv_img_...
  • 在有一些程序开发中,有时候会用到圆形,截取一张图片的一部分圆形,作为头像或者其他. 本实例就是截图圆形,设置头像的.     首先讲解一些代码 [html] view plaincopy ImageView android:id="@+id/...

    在有一些程序开发中,有时候会用到圆形,截取一张图片的一部分圆形,作为头像或者其他.

    本实例就是截图圆形,设置头像的.

      

     

    首先讲解一些代码

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    1. <ImageView android:id="@+id/screenshot_img"  
    2.        android:layout_width="match_parent"  
    3.        android:layout_height="match_parent"  
    4.        android:scaleType="matrix"/>  
    图片属性要设置成android:scaleType="matrix",这样图片才可以通过触摸,放大缩小.


    主类功能:点击按钮选择图片或者拍照

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. public class MainActivity extends Activity {  
    2.       
    3.     private Button btnImg;  
    4.       
    5.     /** 
    6.      * 表示选择的是相机--0 
    7.      */  
    8.     private final int IMAGE_CAPTURE = 0;  
    9.     /** 
    10.      * 表示选择的是相册--1 
    11.      */  
    12.     private final int IMAGE_MEDIA = 1;  
    13.       
    14.     /** 
    15.      * 图片保存SD卡位置 
    16.      */  
    17.     private final static String IMG_PATH = Environment  
    18.             .getExternalStorageDirectory() + "/chillax/imgs/";  
    19.       
    20.     @Override  
    21.     protected void onCreate(Bundle savedInstanceState) {  
    22.         super.onCreate(savedInstanceState);  
    23.         setContentView(R.layout.activity_main);  
    24.           
    25.         btnImg = (Button)findViewById(R.id.btn_find_img);  
    26.         btnImg.setOnClickListener(BtnClick);  
    27.     }  
    28.       
    29.     OnClickListener BtnClick = new OnClickListener() {  
    30.         @Override  
    31.         public void onClick(View v) {  
    32.             // TODO Auto-generated method stub  
    33.             setImage();  
    34.         }  
    35.     };  
    36.       
    37.     /** 
    38.      * 选择图片 
    39.      */  
    40.     public void setImage() {  
    41.         final AlertDialog.Builder builder = new AlertDialog.Builder(this);  
    42.         builder.setTitle("选择图片");  
    43.         builder.setNegativeButton("取消"new DialogInterface.OnClickListener() {  
    44.             @Override  
    45.             public void onClick(DialogInterface dialog, int which) {}  
    46.         });  
    47.         builder.setPositiveButton("相机"new DialogInterface.OnClickListener() {  
    48.             @Override  
    49.             public void onClick(DialogInterface dialog, int which) {  
    50.                 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");  
    51.                 startActivityForResult(intent, IMAGE_CAPTURE);  
    52.             }  
    53.         });  
    54.         builder.setNeutralButton("相册"new DialogInterface.OnClickListener() {  
    55.             @Override  
    56.             public void onClick(DialogInterface dialog, int which) {  
    57.                 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
    58.                 intent.setType("image/*");  
    59.                 startActivityForResult(intent, IMAGE_MEDIA);  
    60.             }  
    61.         });  
    62.         AlertDialog alert = builder.create();  
    63.         alert.show();  
    64.     }  
    65.       
    66.     /**  
    67.      * 根据用户选择,返回图片资源  
    68.      */  
    69.     public void onActivityResult(int requestCode, int resultCode, Intent data) {  
    70.           
    71.         ContentResolver resolver = this.getContentResolver();  
    72.           
    73.         BitmapFactory.Options options = new BitmapFactory.Options();  
    74.         options.inSampleSize = 2;// 图片高宽度都为本来的二分之一,即图片大小为本来的大小的四分之一  
    75.         options.inTempStorage = new byte[5 * 1024];  
    76.           
    77.         if (data != null){  
    78.             if (requestCode == IMAGE_MEDIA){  
    79.                 try {  
    80.                     if(data.getData() == null){  
    81.                     }else{  
    82.                           
    83.                         // 获得图片的uri  
    84.                         Uri uri = data.getData();  
    85.       
    86.                         // 将字节数组转换为ImageView可调用的Bitmap对象  
    87.                         Bitmap bitmap = BitmapFactory.decodeStream(  
    88.                                 resolver.openInputStream(uri), null,options);  
    89.                           
    90.                         //图片路径  
    91.                         String imgPath = IMG_PATH+"Test.png";  
    92.                           
    93.                         //保存图片  
    94.                         saveFile(bitmap, imgPath);  
    95.                           
    96.                         Intent i = new Intent(MainActivity.this,ScreenshotImg.class);  
    97.                         i.putExtra("ImgPath", imgPath);  
    98.                         this.startActivity(i);  
    99.                           
    100.                     }  
    101.                 } catch (Exception e) {  
    102.                     System.out.println(e.getMessage());  
    103.                 }  
    104.   
    105.             }else if(requestCode == IMAGE_CAPTURE) {// 相机  
    106.                 if (data != null) {  
    107.                     if(data.getExtras() == null){  
    108.                     }else{  
    109.                           
    110.                         // 相机返回的图片数据  
    111.                         Bitmap bitmap = (Bitmap) data.getExtras().get("data");  
    112.                           
    113.                         //图片路径  
    114.                         String imgPath = IMG_PATH+"Test.png";  
    115.                           
    116.                         //保存图片  
    117.                         saveFile(bitmap, imgPath);  
    118.                           
    119.                         Intent i = new Intent(MainActivity.this,ScreenshotImg.class);  
    120.                         i.putExtra("ImgPath", imgPath);  
    121.                         this.startActivity(i);  
    122.                     }  
    123.                 }  
    124.             }  
    125.         }  
    126.     }  
    127.       
    128.     /** 
    129.      * 保存图片到app指定路径 
    130.      * @param bm头像图片资源 
    131.      * @param fileName保存名称 
    132.      */  
    133.     public static void saveFile(Bitmap bm, String filePath) {  
    134.             try {  
    135.                 String Path = filePath.substring(0, filePath.lastIndexOf("/"));  
    136.                 File dirFile = new File(Path);  
    137.                 if (!dirFile.exists()) {  
    138.                     dirFile.mkdirs();  
    139.                 }  
    140.                 File myCaptureFile = new File(filePath);  
    141.                 BufferedOutputStream bo = null;  
    142.                 bo = new BufferedOutputStream(new FileOutputStream(myCaptureFile));  
    143.                 bm.compress(Bitmap.CompressFormat.PNG, 100, bo);  
    144.   
    145.                 bo.flush();  
    146.                 bo.close();  
    147.   
    148.             } catch (FileNotFoundException e) {  
    149.                 e.printStackTrace();  
    150.             } catch (IOException e) {  
    151.                 e.printStackTrace();  
    152.             }  
    153.     }  
    154.       
    155.     @Override  
    156.     public boolean onCreateOptionsMenu(Menu menu) {  
    157.         // Inflate the menu; this adds items to the action bar if it is present.  
    158.         getMenuInflater().inflate(R.menu.main, menu);  
    159.         return true;  
    160.     }  
    161.   
    162. }  

    注意:有时候要对图片进行压缩,不然在程序中很容易就造成内存溢出.

    BitmapFactory.Options options = new BitmapFactory.Options();


    options.inSampleSize = 2;// 图片高宽度都为本来的二分之一


    options.inTempStorage = new byte[5 * 1024];


    // 获得图片的uri

    Uri uri = data.getData();

    // 将字节数组转换为ImageView可调用的Bitmap对象
    Bitmap bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri), null,options);


    图片缩放,截图类:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. public class ScreenshotImg extends Activity {  
    2.   
    3.     private LinearLayout imgSave;  
    4.     private ImageView imgView,imgScreenshot;  
    5.     private String imgPath;  
    6.       
    7.     private static final int NONE = 0;  
    8.     private static final int DRAG = 1;  
    9.     private static final int ZOOM = 2;  
    10.   
    11.     private int mode = NONE;  
    12.     private float oldDist;  
    13.     private Matrix matrix = new Matrix();  
    14.     private Matrix savedMatrix = new Matrix();  
    15.     private PointF start = new PointF();  
    16.     private PointF mid = new PointF();  
    17.       
    18.     @Override  
    19.     protected void onCreate(Bundle savedInstanceState) {  
    20.         // TODO Auto-generated method stub  
    21.         super.onCreate(savedInstanceState);  
    22.         this.setContentView(R.layout.img_screenshot);  
    23.   
    24.         imgView = (ImageView)findViewById(R.id.screenshot_img);  
    25.         imgScreenshot = (ImageView)findViewById(R.id.screenshot);  
    26.         imgSave = (LinearLayout)findViewById(R.id.img_save);  
    27.           
    28.         Intent i = getIntent();  
    29.         imgPath = i.getStringExtra("ImgPath");  
    30.           
    31.         Bitmap bitmap = getImgSource(imgPath);  
    32.           
    33.         if(bitmap!=null){  
    34.             imgView.setImageBitmap(bitmap);  
    35.             imgView.setOnTouchListener(touch);  
    36.             imgSave.setOnClickListener(imgClick);  
    37.         }  
    38.           
    39.     }  
    40.       
    41.     OnClickListener imgClick = new OnClickListener() {  
    42.         @Override  
    43.         public void onClick(View v) {  
    44.             // TODO Auto-generated method stub  
    45.             imgView.setDrawingCacheEnabled(true);  
    46.             Bitmap bitmap = Bitmap.createBitmap(imgView.getDrawingCache());  
    47.               
    48.             int w = imgScreenshot.getWidth();    
    49.             int h = imgScreenshot.getHeight();    
    50.               
    51.             int left = imgScreenshot.getLeft();     
    52.             int right = imgScreenshot.getRight();     
    53.             int top = imgScreenshot.getTop();     
    54.             int bottom = imgScreenshot.getBottom();  
    55.               
    56.             Bitmap targetBitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);  
    57.                       
    58.             Canvas canvas = new Canvas(targetBitmap);  
    59.             Path path = new Path();  
    60.               
    61.             path.addCircle((float)((right-left) / 2),((float)((bottom-top)) / 2), (float)(w / 2),  
    62.             Path.Direction.CCW);  
    63.               
    64.             canvas.clipPath(path);  
    65.               
    66.             canvas.drawBitmap(bitmap,new Rect(left,top,right,bottom),new Rect(left,top,right,bottom),null);  
    67.               
    68.             MainActivity.saveFile(targetBitmap, imgPath);  
    69.               
    70.             Toast.makeText(getBaseContext(), "保存成功", Toast.LENGTH_LONG).show();  
    71.               
    72.             finish();  
    73.         }  
    74.     };  
    75.       
    76.     /** 
    77.      * 触摸事件 
    78.      */  
    79.     OnTouchListener touch = new OnTouchListener() {  
    80.         @Override  
    81.         public boolean onTouch(View v, MotionEvent event) {  
    82.             ImageView view = (ImageView) v;  
    83.             switch (event.getAction() & MotionEvent.ACTION_MASK) {  
    84.             case MotionEvent.ACTION_DOWN:  
    85.                 savedMatrix.set(matrix); // 把原始 Matrix对象保存起来  
    86.                 start.set(event.getX(), event.getY()); // 设置x,y坐标  
    87.                 mode = DRAG;  
    88.                 break;  
    89.             case MotionEvent.ACTION_UP:  
    90.             case MotionEvent.ACTION_POINTER_UP:  
    91.                 mode = NONE;  
    92.                 break;  
    93.             case MotionEvent.ACTION_POINTER_DOWN:  
    94.                 oldDist = spacing(event);  
    95.                 if (oldDist > 10f) {  
    96.                     savedMatrix.set(matrix);  
    97.                     midPoint(mid, event); // 求出手指两点的中点  
    98.                     mode = ZOOM;  
    99.                 }  
    100.                 break;  
    101.             case MotionEvent.ACTION_MOVE:  
    102.                 if (mode == DRAG) {  
    103.                     matrix.set(savedMatrix);  
    104.                       
    105.                     matrix.postTranslate(event.getX() - start.x, event.getY()  
    106.                             - start.y);  
    107.                 } else if (mode == ZOOM) {  
    108.                     float newDist = spacing(event);  
    109.                     if (newDist > 10f) {  
    110.                         matrix.set(savedMatrix);  
    111.                         float scale = newDist / oldDist;  
    112.                         matrix.postScale(scale, scale, mid.x, mid.y);  
    113.                     }  
    114.                 }  
    115.                 break;  
    116.             }  
    117.             System.out.println(event.getAction());  
    118.             view.setImageMatrix(matrix);  
    119.             return true;  
    120.         }  
    121.     };  
    122.   
    123.     //求两点距离  
    124.     private float spacing(MotionEvent event) {  
    125.     float x = event.getX(0) - event.getX(1);  
    126.     float y = event.getY(0) - event.getY(1);  
    127.     return FloatMath.sqrt(x * x + y * y);  
    128.     }  
    129.   
    130.     //求两点间中点  
    131.     private void midPoint(PointF point, MotionEvent event) {  
    132.     float x = event.getX(0) + event.getX(1);  
    133.     float y = event.getY(0) + event.getY(1);  
    134.     point.set(x / 2, y / 2);  
    135.     }  
    136.       
    137.     /** 
    138.      * 從指定路徑讀取圖片資源 
    139.      */  
    140.     public Bitmap getImgSource(String pathString) {  
    141.           
    142.         Bitmap bitmap = null;  
    143.         BitmapFactory.Options opts = new BitmapFactory.Options();  
    144. //      opts.inSampleSize = 2;  
    145.           
    146.         try {  
    147.             File file = new File(pathString);  
    148.             if (file.exists()) {  
    149.                 bitmap = BitmapFactory.decodeFile(pathString, opts);  
    150.             }  
    151.             if (bitmap == null) {  
    152.                 return null;  
    153.             } else {  
    154.                 return bitmap;  
    155.             }  
    156.         } catch (Exception e) {  
    157.             e.printStackTrace();  
    158.             return null;  
    159.         }  
    160.     }  
    161.       
    162. }  

    截图关键语句:

    Bitmap targetBitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
                   
     Canvas canvas = new Canvas(targetBitmap);
    Path path = new Path();
           
    path.addCircle((float)((right-left) / 2),((float)((bottom-top)) / 2), (float)(w / 2),
    Path.Direction.CCW);     //绘制圆形
           
    canvas.clipPath(path);
           
    canvas.drawBitmap(bitmap,new Rect(left,top,right,bottom),new Rect(left,top,right,bottom),null);    //截图


    项目源码:http://download.csdn.net/detail/chillax_li/7120673

    (有人说保存图片之后,没打开图片.这是因为我没打开它,要看效果的话,要自己用图库打开,就能看到效果了.这里说明一下)


    尊重原创,转载请注明出处:http://blog.csdn.net/chillax_li/article/details/22591681
            

    展开全文
  • Android自定义圆形图片

    千次下载 热门讨论 2013-12-17 17:09:31
    Android自定义圆形图片,可设置最多两个的外边框。包括从网络获取图片显示。 解决图片锯齿问题。 解决图片变形问题。 文章地址:http://blog.csdn.net/alan_biao/article/details/17379925
  • Android自定义设置圆形图片控件

    千次阅读 多人点赞 2014-09-11 16:18:15
    注:这篇文章是转载alan...Android自定义圆形图片,可设置最多两个的外边框,包括从网络获取图片显示。 1.解决图片锯齿问题。 2.解决图片变形问题。 效果图: 原始图片: 原文地址和源码下载链接:http://bl

    Android自定义圆形图片,可设置最多两个的外边框,包括从网络获取图片显示。

    1.解决图片锯齿问题。

    2.解决图片变形问题。


    效果图:



    原始图片:



    原文地址和源码下载链接:http://blog.csdn.net/alan_biao/article/details/17379925

    展开全文
  • 在有一些程序开发中,有时候会用到圆形,截取一张图片的一部分圆形,作为头像或者其他. 本实例就是截图圆形,设置头像的. 首先讲解一些代码 <ImageView android:id="@+id/screenshot_img" android:layout_...

    在有一些程序开发中,有时候会用到圆形,截取一张图片的一部分圆形,作为头像或者其他.

    本实例就是截图圆形,设置头像的.

      

     

    首先讲解一些代码

    <ImageView android:id="@+id/screenshot_img"
    	   android:layout_width="match_parent"
    	   android:layout_height="match_parent"
    	   android:scaleType="matrix"/>
    图片属性要设置成android:scaleType="matrix",这样图片才可以通过触摸,放大缩小.


    主类功能:点击按钮选择图片或者拍照

    public class MainActivity extends Activity {
    	
    	private Button btnImg;
    	
    	/**
    	 * 表示选择的是相机--0
    	 */
    	private final int IMAGE_CAPTURE = 0;
    	/**
    	 * 表示选择的是相册--1
    	 */
    	private final int IMAGE_MEDIA = 1;
    	
    	/**
    	 * 图片保存SD卡位置
    	 */
    	private final static String IMG_PATH = Environment
    			.getExternalStorageDirectory() + "/chillax/imgs/";
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		btnImg = (Button)findViewById(R.id.btn_find_img);
    		btnImg.setOnClickListener(BtnClick);
    	}
    	
    	OnClickListener BtnClick = new OnClickListener() {
    		@Override
    		public void onClick(View v) {
    			// TODO Auto-generated method stub
    			setImage();
    		}
    	};
    	
    	/**
    	 * 选择图片
    	 */
    	public void setImage() {
    		final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    		builder.setTitle("选择图片");
    		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {}
    		});
    		builder.setPositiveButton("相机", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    				startActivityForResult(intent, IMAGE_CAPTURE);
    			}
    		});
    		builder.setNeutralButton("相册", new DialogInterface.OnClickListener() {
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    				intent.setType("image/*");
    				startActivityForResult(intent, IMAGE_MEDIA);
    			}
    		});
    		AlertDialog alert = builder.create();
    		alert.show();
    	}
    	
    	/**
    	 * 根据用户选择,返回图片资源
    	 */
    	public void onActivityResult(int requestCode, int resultCode, Intent data) {
    		
    		ContentResolver resolver = this.getContentResolver();
    		
    		BitmapFactory.Options options = new BitmapFactory.Options();
    		options.inSampleSize = 2;// 图片高宽度都为本来的二分之一,即图片大小为本来的大小的四分之一
    		options.inTempStorage = new byte[5 * 1024];
    		
    		if (data != null){
    			if (requestCode == IMAGE_MEDIA){
    				try {
    					if(data.getData() == null){
    					}else{
    						
    						// 获得图片的uri
    						Uri uri = data.getData();
    	
    						// 将字节数组转换为ImageView可调用的Bitmap对象
    						Bitmap bitmap = BitmapFactory.decodeStream(
    								resolver.openInputStream(uri), null,options);
    						
    						//图片路径
    						String imgPath = IMG_PATH+"Test.png";
    						
    						//保存图片
    						saveFile(bitmap, imgPath);
    						
    						Intent i = new Intent(MainActivity.this,ScreenshotImg.class);
    						i.putExtra("ImgPath", imgPath);
    						this.startActivity(i);
    						
    					}
    				} catch (Exception e) {
    					System.out.println(e.getMessage());
    				}
    
    			}else if(requestCode == IMAGE_CAPTURE) {// 相机
    				if (data != null) {
    					if(data.getExtras() == null){
    					}else{
    						
    						// 相机返回的图片数据
    						Bitmap bitmap = (Bitmap) data.getExtras().get("data");
    						
    						//图片路径
    						String imgPath = IMG_PATH+"Test.png";
    						
    						//保存图片
    						saveFile(bitmap, imgPath);
    						
    						Intent i = new Intent(MainActivity.this,ScreenshotImg.class);
    						i.putExtra("ImgPath", imgPath);
    						this.startActivity(i);
    					}
    				}
    			}
    		}
    	}
    	
    	/**
    	 * 保存图片到app指定路径
    	 * @param bm头像图片资源
    	 * @param fileName保存名称
    	 */
    	public static void saveFile(Bitmap bm, String filePath) {
    			try {
    				String Path = filePath.substring(0, filePath.lastIndexOf("/"));
    				File dirFile = new File(Path);
    				if (!dirFile.exists()) {
    					dirFile.mkdirs();
    				}
    				File myCaptureFile = new File(filePath);
    				BufferedOutputStream bo = null;
    				bo = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
    				bm.compress(Bitmap.CompressFormat.PNG, 100, bo);
    
    				bo.flush();
    				bo.close();
    
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    	}
    	
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
    
    }

    注意:有时候要对图片进行压缩,不然在程序中很容易就造成内存溢出.

    BitmapFactory.Options options = new BitmapFactory.Options();


    options.inSampleSize = 2;// 图片高宽度都为本来的二分之一


    options.inTempStorage = new byte[5 * 1024];


    // 获得图片的uri

    Uri uri = data.getData();

    // 将字节数组转换为ImageView可调用的Bitmap对象
    Bitmap bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri), null,options);


    图片缩放,截图类:

    public class ScreenshotImg extends Activity {
    
    	private LinearLayout imgSave;
    	private ImageView imgView,imgScreenshot;
    	private String imgPath;
    	
    	private static final int NONE = 0;
    	private static final int DRAG = 1;
    	private static final int ZOOM = 2;
    
    	private int mode = NONE;
    	private float oldDist;
    	private Matrix matrix = new Matrix();
    	private Matrix savedMatrix = new Matrix();
    	private PointF start = new PointF();
    	private PointF mid = new PointF();
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		this.setContentView(R.layout.img_screenshot);
    
    		imgView = (ImageView)findViewById(R.id.screenshot_img);
    		imgScreenshot = (ImageView)findViewById(R.id.screenshot);
    		imgSave = (LinearLayout)findViewById(R.id.img_save);
    		
    		Intent i = getIntent();
    		imgPath = i.getStringExtra("ImgPath");
    		
    		Bitmap bitmap = getImgSource(imgPath);
    		
    		if(bitmap!=null){
    			imgView.setImageBitmap(bitmap);
    			imgView.setOnTouchListener(touch);
    			imgSave.setOnClickListener(imgClick);
    		}
    		
    	}
    	
    	OnClickListener imgClick = new OnClickListener() {
    		@Override
    		public void onClick(View v) {
    			// TODO Auto-generated method stub
    			imgView.setDrawingCacheEnabled(true);
    	        Bitmap bitmap = Bitmap.createBitmap(imgView.getDrawingCache());
    	        
    	        int w = imgScreenshot.getWidth();  
    	        int h = imgScreenshot.getHeight();  
    	        
    	        int left = imgScreenshot.getLeft();   
    	        int right = imgScreenshot.getRight();   
    	        int top = imgScreenshot.getTop();   
    	        int bottom = imgScreenshot.getBottom();
    	        
    	        Bitmap targetBitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
    	                
    	        Canvas canvas = new Canvas(targetBitmap);
    	        Path path = new Path();
    	        
    	        path.addCircle((float)((right-left) / 2),((float)((bottom-top)) / 2), (float)(w / 2),
    	        Path.Direction.CCW);
    	        
    	        canvas.clipPath(path);
    	        
    	        canvas.drawBitmap(bitmap,new Rect(left,top,right,bottom),new Rect(left,top,right,bottom),null);
    	        
    	        MainActivity.saveFile(targetBitmap, imgPath);
    	        
    	        Toast.makeText(getBaseContext(), "保存成功", Toast.LENGTH_LONG).show();
    	        
    	        finish();
    		}
    	};
    	
    	/**
    	 * 触摸事件
    	 */
    	OnTouchListener touch = new OnTouchListener() {
    		@Override
    		public boolean onTouch(View v, MotionEvent event) {
    			ImageView view = (ImageView) v;
    			switch (event.getAction() & MotionEvent.ACTION_MASK) {
    			case MotionEvent.ACTION_DOWN:
    				savedMatrix.set(matrix); // 把原始 Matrix对象保存起来
    				start.set(event.getX(), event.getY()); // 设置x,y坐标
    				mode = DRAG;
    				break;
    			case MotionEvent.ACTION_UP:
    			case MotionEvent.ACTION_POINTER_UP:
    				mode = NONE;
    				break;
    			case MotionEvent.ACTION_POINTER_DOWN:
    				oldDist = spacing(event);
    				if (oldDist > 10f) {
    					savedMatrix.set(matrix);
    					midPoint(mid, event); // 求出手指两点的中点
    					mode = ZOOM;
    				}
    				break;
    			case MotionEvent.ACTION_MOVE:
    				if (mode == DRAG) {
    					matrix.set(savedMatrix);
    					
    					matrix.postTranslate(event.getX() - start.x, event.getY()
    							- start.y);
    				} else if (mode == ZOOM) {
    					float newDist = spacing(event);
    					if (newDist > 10f) {
    						matrix.set(savedMatrix);
    						float scale = newDist / oldDist;
    						matrix.postScale(scale, scale, mid.x, mid.y);
    					}
    				}
    				break;
    			}
    			System.out.println(event.getAction());
    			view.setImageMatrix(matrix);
    			return true;
    		}
    	};
    
    	//求两点距离
    	private float spacing(MotionEvent event) {
    	float x = event.getX(0) - event.getX(1);
    	float y = event.getY(0) - event.getY(1);
    	return FloatMath.sqrt(x * x + y * y);
    	}
    
    	//求两点间中点
    	private void midPoint(PointF point, MotionEvent event) {
    	float x = event.getX(0) + event.getX(1);
    	float y = event.getY(0) + event.getY(1);
    	point.set(x / 2, y / 2);
    	}
    	
    	/**
    	 * 從指定路徑讀取圖片資源
    	 */
    	public Bitmap getImgSource(String pathString) {
    		
    		Bitmap bitmap = null;
    		BitmapFactory.Options opts = new BitmapFactory.Options();
    //		opts.inSampleSize = 2;
    		
    		try {
    			File file = new File(pathString);
    			if (file.exists()) {
    				bitmap = BitmapFactory.decodeFile(pathString, opts);
    			}
    			if (bitmap == null) {
    				return null;
    			} else {
    				return bitmap;
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    	
    }

    截图关键语句:

    Bitmap targetBitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
                   
     Canvas canvas = new Canvas(targetBitmap);
    Path path = new Path();
           
    path.addCircle((float)((right-left) / 2),((float)((bottom-top)) / 2), (float)(w / 2),
    Path.Direction.CCW);     //绘制圆形
           
    canvas.clipPath(path);
           
    canvas.drawBitmap(bitmap,new Rect(left,top,right,bottom),new Rect(left,top,right,bottom),null);    //截图


    项目源码:http://download.csdn.net/detail/chillax_li/7120673

    (有人说保存图片之后,没打开图片.这是因为我没打开它,要看效果的话,要自己用图库打开,就能看到效果了.这里说明一下)


    尊重原创,转载请注明出处:http://blog.csdn.net/chillax_li/article/details/22591681
            

    转载于:https://www.cnblogs.com/Chillax-KUN/p/3841307.html

    展开全文
  • 找了很多,觉得这一篇写的还不错。 Glide加载图片 实现圆形头像

    找了很多,觉得这一篇写的还不错。

    Glide加载图片 实现圆形头像

    展开全文
  • Android设置圆形图片以及指定颜色边缘 /** * 设置圆形图片以及指定颜色边缘 * * @param context context对象 * @param avatar 图片 * @param color 颜色边缘 * @param value 边缘宽度 * @return ...
  • Android自定义圆形图片,设置边框

    万次阅读 2014-09-27 16:13:25
    Android自定义圆形图片,可设置最多两个的外边框。包括从网络获取图片显示。 解决图片锯齿问题。 解决图片变形问题
  • Android自定义圆形图片,可设置最多两个的外边框。包括从网络获取图片显示。 解决图片锯齿问题。 解决图片变形问题 有需要的可以下载,效果图在 http://blog.csdn.net/wangqing830414/article/details/39612421
  • 关于Glide的加载在这里不详细说了,主要说一下自定义BitmapTransformation来实现圆形图片加载 static class GlideCircleTransform extends BitmapTransformation { private Paint mBorderPaint; ...
  • import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics....
  •  通过Xfermode方式,主要是把两张图片组合,由你决定是选取重叠部分还是非重叠部分,可以参考Android官方提供的图片 本文采用DstIn方式,首先画一个实心圆 //实心圆的宽高要与当前view的尺寸相同private ...
  • 初学andorid 遇到一个圆形的ImageView显示的需求,网上已经有了很多方法,网上找过很多资料,用重写ImageView Ondraw()方法加上自己的理解,整理了一下: 1.新建一个Imageview类,继承AppCompatImageView 2.重写一个...
  • Glide 设置默认图片,异常图片,资源图片都为圆形图片,根据源码一步步分析。
  • android中现在很流行圆形图片,这个工具类可以很容易地将普通的bitmap转换成圆形的图片,可以设置圆形图片的边框宽度及颜色
  • Android实现圆形图片

    2014-10-27 20:49:00
    Android程序也有一段时间了,今天突然被问怎么实现一个圆形图片,很多app图像是圆形的。但是用户上传的图像可不是圆的,所以问题就来了,需要我们代码实现圆形图片。但是大脑飞转想到第三方图片缓存工具...
  • 采用paint.setXfermode() 设置一个简单的圆形遮罩,详细了解请移步http://blog.csdn.net/zxc514257857/article/details/63834235
  • android绘制圆形图片的两种方式 看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 447
精华内容 178
关键字:

android设置圆形图片