Android中利用OnTouchListener在中ImageView中動態顯示圖片
簡要步驟:
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調了下)
