Android中利用OnTouchListener在中ImageView中动态显示图片
2012-06-05 17:12
549 查看
简要步骤:
1.新建自己的layout,以便动态添加imageview等控件,并利用setOrientation设置为vertical
final LinearLayout layout2=new LinearLayout(this);
2.引用资源中的图片,并生成BitmapDrawable
Resources res=getResources();
bmp=BitmapFactory.decodeResource(res,R.drawable.capture);
BitmapDrawable bmp1=new BitmapDrawable(bmp);
其中R.drawable.capture 引用res/drawable文件夹下的capture.bmp,这个图片是我直接拷到darwable文件下的,正常情况下R.java中的R.drawable下应该有capture了,这个会自动生成,如果没有自动生成的话,检查一下Eclipse->project->Automatically是否勾选上
3.生成Imageview, 并设置imageview支持click
ImageView image1=new ImageView(this);
image1.setImageDrawable(bmp1);
image1.setClickable(true);
4.把image1添加到layout2中,并设置setContentView
layout2.addview(image1);
setContentView(layout2);
到这步,已经成功的添加了imageview,并显示出来,可以下载到手机上看看,这里就不截图了
5.接下来,主要是添加OnTouchListener();类似于OnClickListener(),不过需要在new OnTouchListener中实现OnTouch函数。OnTouchListenter是个接口,必须在类中实现它,所以new 了个类OnTouchListener,并在类中implement OnTouch函数。
其中,float startx=0.0f;
float starty=0.0f;
float endx=0.0f;
float endy=0.0f;
是2个坐标点,一个起始点,一个结束点,根据这两个对角线的点,就可以框选出矩形图。
6.接下来说一下OnTouch中的代码主要通过event.getAction()判断下是ACTION_DOWN(初始点),还是ACTION_UP(结束点)
并记录下来,在ACTION_UP(结束点)触发后,就利用sx,sy,ex,ey来生成bmp
bmpp=new Bitmap.CreateBitmap(bmp,sx,sy,Math.abs(ex-sx),Math.abs(ey-sy));
7.剩下的就简单了,新建个imageview,并添加到layout2中
代码如下:
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class T extends Activity {
/** Called when the activity is first created. */
Bitmap bmp;
Bitmap bmpp;
OnTouchListener listen1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
final LinearLayout layout2=new LinearLayout(this);
layout2.setOrientation(LinearLayout.VERTICAL);
Resources res=getResources();
bmp=BitmapFactory.decodeResource(res,R.drawable.capture);
BitmapDrawable bmp1=new BitmapDrawable(bmp);
ImageView image1=new ImageView(this);
image1.setImageDrawable(bmp1);
image1.setClickable(true);
layout2.addView(image1);
setContentView(layout2);
listen1=new OnTouchListener(){
float startx=0.0f;
float starty=0.0f;
float endx=0.0f;
float endy=0.0f;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
float x=event.getX();
float y=event.getY();
if(event.getAction()==MotionEvent.ACTION_DOWN){
startx=x;
starty=y;
}
if(event.getAction()==MotionEvent.ACTION_UP){
endx=x;
endy=y;
int sx=(int)startx;
int sy=(int)starty;
int ex=(int)endx;
int ey=(int)endy;
bmpp=Bitmap.createBitmap(bmp,sx,sy,Math.abs(ex-sx),Math.abs(ey-sy));
BitmapDrawable bmpp1=new BitmapDrawable(bmpp);
ImageView im1=new ImageView(v.getContext());
im1.setImageDrawable(bmpp1);
layout2.addView(im1);
}
return true;
}
};
image1.setOnTouchListener(listen1);
}
}
目前没有写框选时出现的矩形框代码,以后有时间添加上,虽然没有矩形框显示出来,但实际上已经框选好了,并在另一个动态添加的控件imageview中显示出来。呵呵,最后效果(手机忘带了,就用Emulator调了下)
1.新建自己的layout,以便动态添加imageview等控件,并利用setOrientation设置为vertical
final LinearLayout layout2=new LinearLayout(this);
2.引用资源中的图片,并生成BitmapDrawable
Resources res=getResources();
bmp=BitmapFactory.decodeResource(res,R.drawable.capture);
BitmapDrawable bmp1=new BitmapDrawable(bmp);
其中R.drawable.capture 引用res/drawable文件夹下的capture.bmp,这个图片是我直接拷到darwable文件下的,正常情况下R.java中的R.drawable下应该有capture了,这个会自动生成,如果没有自动生成的话,检查一下Eclipse->project->Automatically是否勾选上
3.生成Imageview, 并设置imageview支持click
ImageView image1=new ImageView(this);
image1.setImageDrawable(bmp1);
image1.setClickable(true);
4.把image1添加到layout2中,并设置setContentView
layout2.addview(image1);
setContentView(layout2);
到这步,已经成功的添加了imageview,并显示出来,可以下载到手机上看看,这里就不截图了
5.接下来,主要是添加OnTouchListener();类似于OnClickListener(),不过需要在new OnTouchListener中实现OnTouch函数。OnTouchListenter是个接口,必须在类中实现它,所以new 了个类OnTouchListener,并在类中implement OnTouch函数。
其中,float startx=0.0f;
float starty=0.0f;
float endx=0.0f;
float endy=0.0f;
是2个坐标点,一个起始点,一个结束点,根据这两个对角线的点,就可以框选出矩形图。
6.接下来说一下OnTouch中的代码主要通过event.getAction()判断下是ACTION_DOWN(初始点),还是ACTION_UP(结束点)
并记录下来,在ACTION_UP(结束点)触发后,就利用sx,sy,ex,ey来生成bmp
bmpp=new Bitmap.CreateBitmap(bmp,sx,sy,Math.abs(ex-sx),Math.abs(ey-sy));
7.剩下的就简单了,新建个imageview,并添加到layout2中
代码如下:
import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class T extends Activity {
/** Called when the activity is first created. */
Bitmap bmp;
Bitmap bmpp;
OnTouchListener listen1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
final LinearLayout layout2=new LinearLayout(this);
layout2.setOrientation(LinearLayout.VERTICAL);
Resources res=getResources();
bmp=BitmapFactory.decodeResource(res,R.drawable.capture);
BitmapDrawable bmp1=new BitmapDrawable(bmp);
ImageView image1=new ImageView(this);
image1.setImageDrawable(bmp1);
image1.setClickable(true);
layout2.addView(image1);
setContentView(layout2);
listen1=new OnTouchListener(){
float startx=0.0f;
float starty=0.0f;
float endx=0.0f;
float endy=0.0f;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
float x=event.getX();
float y=event.getY();
if(event.getAction()==MotionEvent.ACTION_DOWN){
startx=x;
starty=y;
}
if(event.getAction()==MotionEvent.ACTION_UP){
endx=x;
endy=y;
int sx=(int)startx;
int sy=(int)starty;
int ex=(int)endx;
int ey=(int)endy;
bmpp=Bitmap.createBitmap(bmp,sx,sy,Math.abs(ex-sx),Math.abs(ey-sy));
BitmapDrawable bmpp1=new BitmapDrawable(bmpp);
ImageView im1=new ImageView(v.getContext());
im1.setImageDrawable(bmpp1);
layout2.addView(im1);
}
return true;
}
};
image1.setOnTouchListener(listen1);
}
}
目前没有写框选时出现的矩形框代码,以后有时间添加上,虽然没有矩形框显示出来,但实际上已经框选好了,并在另一个动态添加的控件imageview中显示出来。呵呵,最后效果(手机忘带了,就用Emulator调了下)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/24/d61744145a2c502628c4c6efd87341ff.jpg)
相关文章推荐
- Android中利用OnTouchListener在ImageView中框选显示图片
- Android中利用OnTouchListener在ImageView中框选显示图片
- Android中利用OnTouchListener在ImageView中框选显示图片
- android 利用contentprovider查询图库里的图片并用imageview显示
- Android开发 利用imageview显示选取的手机内存的图片
- Android—基于GifView显示gif动态图片
- Android的TextView利用HTML类处理图片显示、字体样式
- Android 利用ImageView显示图片
- Android可以动态控制图片显示区域的自定义ImageView
- android网络获取图片并保存在本地和获取手机SD卡中的图片显示到ImageView上及利用代码删除图片
- android GLSurfaceView显示图片的问题!!!!
- 关于真机测试的android选择图片在ImageView上显示,调用setImageBitmap无法显示和闪退、控件消失
- Android 显示和控制gif动态图片的播放
- Android TextView使用HTML处理字体样式、显示图片等
- Android的TextView使用Html来处理图片显示、字体样式、超链接等
- Android用ImageView显示本地和网上的图片
- Android使用WebView显示网页(图片缩放)
- Android应用——用LayoutTransition在View动态显示和隐藏时候加上动画
- android viewflipper 左右滑动切换显示图片效果
- 【Android自定义View实战】之仿去哪儿网App图片按压显示指纹并缩放效果TouchFingerImageView