馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
本帖最後由 onlyhska 於 2014-3-30 16:23 編輯
- public class MainActivity extends Activity {
- Bitmap bitmap,bt;
- ByteBuffer handler ;
- int dw,dh;
- int bmpWidth,bmpHeight;
- SurfaceView sfv;
- boolean flag,lag;
- Thread conn;
- Matrix matrix;
- Paint mypaint;
- private ScaleGestureDetector mScaleGestureDetector = null;
- float scale;
- PointF mid = new PointF();
-
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- dw = getWindowManager().getDefaultDisplay().getWidth();//手機螢幕寬度
- dh = getWindowManager().getDefaultDisplay().getHeight();//手機螢幕高度
-
-
-
- sfv = (SurfaceView) findViewById(R.id.sfv);
- mScaleGestureDetector = new ScaleGestureDetector(this,new ScaleGestureListener());
- sfv.getHolder().addCallback(new Callback()
- {
- @Override
- public void surfaceDestroyed(SurfaceHolder holder)
- {
- //停止執行緒
- flag=false;
- conn.interrupt();
- conn=null;
- }
-
- @Override
- public void surfaceCreated(SurfaceHolder holder)
- {
- conn=new Thread(new Runnable()
- {
-
- public void run()
- {
- flag=true;
- try
- {
- String url="http://172.16.17.39/Media/Snapshot?deviceid=7";
- IMGParser parser2 = new IMGParser();
- InputStream input=parser2.getIMGFromUrl(url);
-
- byte[] data=readFully(input);
- bitmap = BitmapFactory.decodeByteArray(data, 0 , data.length);
-
- if(!lag)
- {
- bmpWidth=bitmap.getWidth();
- bmpHeight=bitmap.getHeight();
-
- scale=(float) (dw/(bmpWidth *1.0));
- matrix=new Matrix();
- matrix.setScale(scale, scale);
- matrix.postTranslate(0,(dh-(bmpHeight*scale))/2);//圖片位置
- lag=true;
- }
-
- synchronized(sfv.getHolder())
- {
- Canvas canvas = sfv.getHolder().lockCanvas(); // 加鎖
- //設定Canvas屬性
- canvas.drawColor(Color.BLACK);//設定畫布顏色
- canvas.drawBitmap(bitmap, matrix, null);
- sfv.getHolder().unlockCanvasAndPost(canvas);//解鎖
- }
-
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
-
- }
- });
- conn.start();
- }
-
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)
- {
- }
- });
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) //移動
- {
- // if (event.getAction() == MotionEvent.ACTION_DOWN) {
- //
- // float x = event.getX();
- //
- // float y = event.getY();
- //
- // Canvas canvas=sfv.getHolder().lockCanvas();
- // canvas.drawColor(Color.BLACK);
- // // canvas.drawBitmap(bitmap,x,y,null);
- //
- // sfv.getHolder().unlockCanvasAndPost(canvas);
- // }
- //
- return mScaleGestureDetector.onTouchEvent(event);
- }
-
- public class ScaleGestureListener implements ScaleGestureDetector.OnScaleGestureListener
- {
- @Override
- public boolean onScale(ScaleGestureDetector detector) //放大縮小
- {
- //Matrix matrix = new Matrix();
- float scale = detector.getScaleFactor(); //縮放倍率
- matrix.postScale( scale,scale,mid.x,mid.y);
- //matrix.postScale( scale,scale,detector.getFocusX(),detector.getFocusY());
- //matrix.setTranslate(0,(dh-(bmpHeight*scale))/2);//圖片位置
- synchronized(sfv.getHolder())
- {
- Canvas canvas = sfv.getHolder().lockCanvas();
- canvas.drawColor(Color.BLACK);
- canvas.concat(matrix);
- canvas.drawBitmap(bitmap, matrix, null);
- sfv.getHolder().unlockCanvasAndPost(canvas);
- }
-
-
- return true;
- }
-
- @Override
- public boolean onScaleBegin(ScaleGestureDetector detector)
- {
- return true; //返回true才會進入onScale()
- }
- @Override
- public void onScaleEnd(ScaleGestureDetector detector)
- {
-
- }
-
- }
- public byte[] readFully(InputStream input) throws IOException
- {
-
- byte[] buffer = new byte[8192];
- int bytesRead;
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- while ((bytesRead = input.read(buffer)) != -1)
- {
- output.write(buffer, 0, bytesRead);
- }
- input.close();
- return output.toByteArray();
- }
- }
複製代碼
以上是程式碼
在縮放地方 每次放大前都會先縮小
然後圖片會一直跑到下方
有時候放大之後就不見了@@
請問我是哪裡寫錯了嗎??
還有移動圖片的地方
沒有辦法點擊圖片移動
變成點空白處
圖片會移到那
該怎麼修改才對呢??
希望大家可以幫幫忙>< |
|