Android中利用OnTouchListener在中ImageView中動態顯示圖片

openkk 12年前發布 | 61K 次閱讀 Android Android開發 移動開發

簡要步驟:

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調了下)

 

Android中利用OnTouchListener在中ImageView中動態顯示圖片

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!