这个就只有自定义类了,去这里http://download.csdn.net/detail/wds1181977/7726319 下载后自己调试,再修改部分代码应该就能达到你的需求了

解决方案 »

  1.   

    从根本上说,就是改变了控件的属性,自定义控件是最灵活的,但是要有一定的基础和了解。
    要是不想用的话,那就试试用view的scale和translate这两个方法吧,当然用Matrix也可以。
      

  2.   

    自定义类 很麻烦 但是很灵活
    你学会我下面的代码 就能做到了
    虽然你可能懒得学 。。但我还是 写了
    写的很不规范,,你学个大概  吧。。public class MbfView  extends SurfaceView implements SurfaceHolder.Callback {
         
        public MbfView( Context context,Handler handler) {  
         super(context);
        myhandler=handler;
        Mbfcontext=context;
        SurfaceHolder holder = getHolder();
            holder.addCallback(this); 
            setFocusable(true);  
     
    }
     
     
       
      @Override
    public void surfaceCreated(SurfaceHolder holder) {
      mholder=holder; 
    //   mythread = new MbfThread(holder, Mbfcontext); 
     } 
     
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {    
            resetthread();
    }
     
     public final void resetthread(){
     mythread = new MbfThread(mholder, Mbfcontext);  
     mythread.setSurfaceSize(); 
     Maina.mvRun=true;
     mythread.start(); 
     
     }
     
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) { 
           boolean retry = true; 
            while (retry) {
                try {
                 mythread.join();
                    retry = false;
                } catch (InterruptedException e) { } 
                }
                }
      
       
      @Override
        public boolean onTouchEvent(MotionEvent e) { 
         switch(e.getAction()){
         case MotionEvent.ACTION_DOWN: 
         mythread.actdown(e.getX(),e.getY()); 
          break;
          
         case MotionEvent.ACTION_MOVE:
          mythread.moveimg(e.getX() ,e.getY());
          break;  
           
        case MotionEvent.ACTION_UP: 
           mythread.keyup(e.getX() ,e.getY());  
          break;
         }
          
         
         return true;
        }
      
     //========线程================线程=================线程=========线程==========
      private final   class MbfThread extends Thread {
          
     private Drawable  图片1 ;    //多个图片的话 可以 定义成数组
      
     
     public MbfThread(SurfaceHolder surfaceHolder, Context context){ 
       res = context.getResources();
       mSurfaceHolder=surfaceHolder; 
     
     图片1= res.getDrawable(R.drawable. 图片1);   
        
      } 
      
         @Override
            public void run() { 
      init();      //初始化 参数
      
       while( mvRun){  
    //  Canvas c = null;
                  try {
                     c = mSurfaceHolder.lockCanvas();
                      synchronized (mSurfaceHolder) {  
                          doDraw( );  
                      }
                  } finally {
                     if (c != null) {
                          mSurfaceHolder.unlockCanvasAndPost(c);
                          c= null; } }   
                  }
     
       
      }
      
      
     private final  void setSurfaceSize( ) { 
                synchronized (mSurfaceHolder) {
             allcanw =  width;
                    allcanh =  height;   
                }
            } 
      
          //。。画屏幕初始化 
     private final void init(){ 
    在这里 定义一个 和 图片大小一样 的  Rect 
     在这里 自定义 图片的  x  y   值  set 图片  的  setBounds    
      }   
      
     private final  void doDraw() {   
     //在这里   draw 你图片的 drawable
       
    }
      
     
     private final void actdown(float x,float y){   
    if((new Region(图片Rect)).contains((int)x, (int)y) ){
    //判断是否 按了图片的 Rect   按的是第几个图片的 Rect 
    // 并告诉 下面的 moveimg 你要move 第几个图片
     
    }  
     
    }  
      
      private final void moveimg(float x,float y){ 
     
    //在这里 改变 图片的 x y 值  同时别忘  重设 图片 Rect  和  图片  setbounds  }  
       
      
     private final  void keyup(float x,float y){  
     //这里是 抬起了手指 后 的 操作
     }  
    }  
        //======线程====================线程==========================线程========================
        
       
        
    }
     
     
      

  3.   

    不用@了,你看下7楼的方法,我看了,挺不错的,重要的就是在于ontouch和ondraw的复写