本文章给大家介绍一款Android学习笔记之裁剪图片代码,有需要的朋友可参考参考。
在Android平台下开发处理图片裁剪的应用,如果感觉实现的逻辑比较麻烦,比如说需要写类此Win32下的橡皮筋类 CRectTracker来设置裁剪区域,这里给大家一个最简单可靠的方法,通过下面的Intent调用系统的Camera程序的裁剪功能实现图片修剪。
java
代码如下 |
复制代码 |
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage"); |
不过这里提醒大家可能会出现无法找到Activity的android.content.ActivityNotFoundException异常,这是由于Android内部的gallery和camera 都有处理,可以尝试另一种URI,com.android.gallery的com.android.camera.CropImage,在setClassName时,具体的代码为
java
代码如下 |
复制代码 |
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
intent.setData(Uri.fromFile(mFile));
intent.putExtra("outputX", width);
intent.putExtra("outputY", height);
intent.putExtra("aspectX", width);
intent.putExtra("aspectY", height);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", Uri.parse("file:/" + mFile.getAbsolutePath()));
startActivityForResult(intent, REQUEST_CROP_IMAGE);
|
本文章来给各位朋友介绍Android中显示网络图片实现代码有需要的朋友可参考参考。
在android当中显示一张网络图片的时候,其实是比较麻烦的。首先得把这个网络图片转换成java的imputstream流,然后再把这个留转换成一个bitMap.
bitMap是可以作为参数传给imageView的。
在下边的returnBitMap函数是最核心的,也是大家可以重用的,它负责把一个url的网络图片变成一个本地的BitMap
代码如下 |
复制代码 |
package com.jinyan.image;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class ActivityMain extends Activity {
/** Called when the activity is first created. */
String imageUrl = "http://i.pbase.com/o6/92/229792/1/80199697.uAs58yHk.50pxCross_of_the_Knights_Templar_svg.png";
Bitmap bmImg;
ImageView imView;
Button button1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imView = (ImageView) findViewById(R.id.imview);
imView.setImageBitmap(returnBitMap(imageUrl));
}
public Bitmap returnBitMap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
}
|
xml文件
代码如下 |
复制代码 |
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/imview" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_gravity="center" />
LinearLayout>
|
注意,想要让你的程序可以访问网络,你必须在menifest文件里边增加:
代码如下 |
复制代码 |
<uses-permission android:name="android.permission.INTERNET" />
|
本文章来给各位朋友介绍一个android图像绘制--获取本地图片或拍照图片代码,有需要了解的朋友可以参考参考。
从SD卡中获取图片资源,或者拍一张新的图片。
注释:拍照获取的话,可以指定图片的保存地址,在此不说明。
从SD卡中获取图片资源,或者拍一张新的图片。
先贴代码
获取图片:
注释:拍照获取的话,可以指定图片的保存地址,在此不说明。
代码如下 |
复制代码 |
CharSequence[] items = {"相册", "相机"};
new AlertDialog.Builder(this)
.setTitle("选择图片来源")
.setItems(items, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if( which == SELECT_PICTURE ){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent。CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(Intent。createChooser(intent, "选择图片"), SELECT_PICTURE);
}else{
Intent intent = new Intent(MediaStore。ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, SELECT_CAMER);
}
}
})
.create().show();
CharSequence[] items = {"相册", "相机"};
new AlertDialog.Builder(this)
.setTitle("选择图片来源")
.setItems(items, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if( which == SELECT_PICTURE ){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "选择图片"), SELECT_PICTURE);
}else{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, SELECT_CAMER);
}
}
})
.create().show(); |
处理图片,方法一,直接处理返回图片:
注释:
1、网上有说明,直接处理返回的图片是被系统压缩过的,不过自己在测试的过程并没有区别;
2、如果用户不断的重新获取图片的话,必须把现在的Bmp内存释放,否则会报错! bmp.recycle()。
代码如下 |
复制代码 |
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
//选择图片
Uri uri = data.getData();
ContentResolver cr = this.getContentResolver();
try {
if(bmp != null)//如果不释放的话,不断取图片,将会内存不够
bmp.recycle();
bmp = BitmapFactory.decodeStream(cr.openInputStream(uri));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("the bmp toString: " + bmp);
imageSV.setBmp(bmp);
}else{
Toast.makeText(SetImageActivity.this, "请重新选择图片", Toast.LENGTH_SHORT).show();
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
//选择图片
Uri uri = data.getData();
ContentResolver cr = this.getContentResolver();
try {
if(bmp != null)//如果不释放的话,不断取图片,将会内存不够
bmp.recycle();
bmp = BitmapFactory.decodeStream(cr.openInputStream(uri));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("the bmp toString: " + bmp);
imageSV.setBmp(bmp);
}else{
Toast.makeText(SetImageActivity.this, "请重新选择图片", Toast.LENGTH_SHORT).show();
}
}
|
处理图片,方法二,获得图片的地址再处理:
代码如下 |
复制代码 |
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
Uri uri = data.getData();
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( uri,
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
bmp = BitmapFactory.decodeFile(path);
System.out.println("the path is :" + path);
}else{
Toast.makeText(SetImageActivity.this, "请重新选择图片", Toast.LENGTH_SHORT).show();
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
Uri uri = data.getData();
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor = managedQuery( uri,
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
bmp = BitmapFactory.decodeFile(path);
System.out.println("the path is :" + path);
}else{
Toast.makeText(SetImageActivity.this, "请重新选择图片", Toast.LENGTH_SHORT).show();
}
}
|
本文章给大家介绍一篇关于android中利用ImageView 图片循环播放代码,功能由三个文件组成一个是xml,一个是主处理文件,另一个是预览文件了,有需要了解的朋友可参考。
xml
代码如下 |
复制代码 |
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/linearLayout" >
</LinearLayout>
|
主文件:
代码如下 |
复制代码 |
public class picBarActivity extends Activity{
private LinearLayout linearLayout;
private picBar myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.pic_progress);
linearLayout = (LinearLayout)this.findViewById(R.id.linearLayout);
myView = new picBar(this);
linearLayout.addView(myView);
}
}
|
View文件:
代码如下 |
复制代码 |
public class picBar extends View{
int COMPONENT_WIDTH;//控件的宽度
int COMPONENT_HEIGHT;//控件的高度
boolean initflag = false;//是否已经初始化图片
Bitmap[] bmp;//用来存放图片的数组
int currIndex = 0;//当前播放图片的ID
int[] bitmapId;//图片编号ID
boolean workFlag = true;//播放图片的线程标识位
public picBar(Context context) {
super(context);
//首先,要播放图片,就先要有图片,那就先给各个图片编号吧,这里的图片资源存放在了res下的drawable文件夹下了
bitmapId =new int[]{R.drawable.loading1_03, R.drawable.loading2_03, R.drawable.loading3_03};
//好了,图片的编号现在已经搞定了,接下来该干什么呢?对,应该将资源里的图片塞进Bitmap数组了,那么我们先来确定将要播放的图片的数量,即Bitmap数组的长度
bmp = new Bitmap[bitmapId.length];//这里不要直接将数值赋给bmp,因为我们可能会不定期地更换图片资源,这样我们就要修改多处代码,而我们这样根据
//图片的ID来确定图片的数量,以减少不必要的麻烦,下面开始初始化图片,我们将初始化图片放在一个函数里
initBitmap();//图片初始化完毕
//图片初始化完毕了,接下来我们要做的就是播放图片了,但是播放图片之前,我们有一个问题,就是怎样让图片实现循环播放?这里我们另开一个新的线程来定时更改
//要播放的图片的ID,以实现图片的循环播放,要实现循环播放图片的功能,我们需要覆写onDraw函数,首先,我们来新开一个线程
new Thread(){
//重写run方法
public void run(){
// TODO Auto-generated method stub
while(workFlag)//一直执行这个循环(死循环)
{
currIndex = (currIndex+1)%bitmapId.length;//更改图片的ID
picBar.this.postInvalidate();//刷新屏幕,导致屏幕重绘
try
{
Thread.sleep(3000);//到此处暂停3秒钟,然后继续执行run函数,即实现每隔3秒钟刷新屏幕一次
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
}
//初始化图片
public void initBitmap()
{
//获取资源图片
Resources res = this.getResources();
for(int i=0;i<bitmapId.length;i++){
bmp<I> = BitmapFactory.decodeResource(res, bitmapId<I>);
}
}
//覆写onDraw方法
@Override
protected void onDraw(Canvas canvas)
{
// TODO Auto-generated method stub
super.onDraw(canvas);
if(!initflag)//检查是偶已经获取控件的宽和高,如果没有,那么就获取控件的宽和高
{
COMPONENT_WIDTH = this.getWidth();
COMPONENT_HEIGHT = this.getHeight();
initflag = true;
}
Paint p = new Paint();
canvas.drawBitmap(bmp[currIndex], 0, 0, p);//绘制图片
}
}
|
本文章来给大家介绍关于Android学习笔记之ImageView显示图片,在于android中ImageView是Android程序中经常用到的组件,它将一个图片显示到屏幕上。
代码如下 |
复制代码 |
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myimage);
ImageView image1 = (ImageView) findViewById(R.myImage.image);
//Bitmap bitmap = getLoacalBitmap("/aa/aa.jpg"); //从本地取图片
Bitmap bitmap =
getHttpBitmap("hpath.jpg");
//从网上取图片
image1 .setImageBitmap(bitmap); //设置Bitmap
}
/**
* 加载本地图片
* http://www.111cn.net
* @param url
* @return
*/
public static Bitmap getLoacalBitmap(String url) {
try {
FileInputStream fis = new FileInputStream(url);
return BitmapFactory.decodeStream(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
/**
* 从服务器取图片
*http://www.111cn.net
* @param url
* @return
*/
public static Bitmap getHttpBitmap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
Log.d(TAG, url);
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setConnectTimeout(0);
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
|
ImageView 无法setImageBitmap,不显示图片解决办法
以下是handler
代码如下 |
复制代码 |
handler.post(new Runnable() {
@Override
public void run() {
playAdver();
}
});
|
以下是playAdver()方法,主要是显示图片
代码如下 |
复制代码 |
private void playAdver() {
for (int i = 0; i < advertisementsList.size(); i++) {
advertisement = advertisementsList.get(i);
fileName = advertisement.getName();
index = advertisement.getName().indexOf(".");
String postfix = fileName.substring(index, fileName.length());
time = advertisement.getTime() * 100;
if (postfix.compareToIgnoreCase(".jpg") == 0
|| postfix.compareToIgnoreCase(".png") == 0) {
adverImage.setVisibility(View.VISIBLE);
adverImage.setImageBitmap(BitmapFactory.decodeFile(fileName));
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
|
执行了adverImage.setImageBitmap(BitmapFactory.decodeFile(fileName));但是在真机上不现实图片,为什么?
因为我是在主线程里面执行的,故不会显示,以解决