2010-11-23 13 views
15

में छवि को स्पर्श करें और खींचें मैं कुछ उदाहरण पर काम कर रहा हूं जिसमें मैं एंड्रॉइड में स्पर्श करने के लिए संबंधित छवि खींचना चाहता हूं। क्या किसी के पास कोई विचार है कि मैं इसे कैसे कर सकता हूं?एंड्रॉइड

+0

इस ट्यूटोरियल को आजमाएं .... http://www.anddev.org/basic_drag_and_drop-t3095.html – Noman

+0

यदि आप 'SurfaceView' का उपयोग करते हैं तो आप मेरे ट्यूटोरियल भाग का पालन करने का प्रयास कर सकते हैं। http://www.droidnova.com/playing-with-graphics-in-android-part-vi,209.html इस भाग में, मैं आपको परिचय देता हूं कि स्पर्श को स्थानांतरित करते समय आप SurfaceView पर स्थिति को कैसे जोड़ और बदल सकते हैं । उसके बाद का हिस्सा एक छोटा सा गेम है जो एक छोटे से खेल में सभी सीखा सामान लागू करता है। मुझे लगता है कि आपको मदद करनी चाहिए और आपको यह कैसे करना है ... – WarrenFaith

उत्तर

28
public class TouchBall extends Activity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    int w=getWindowManager().getDefaultDisplay().getWidth()-25; 
    int h=getWindowManager().getDefaultDisplay().getHeight()-25; 

    BallView ballView=new BallView(this,w,h); 
    setContentView(ballView); 
} 


} 
public class BallView extends SurfaceView implements SurfaceHolder.Callback { 

    private Bitmap bitmap ; 
    private MyThread thread; 
    private int x=20,y=20;int width,height; 

    public BallView(Context context,int w,int h) { 
     super(context); 

     width=w; 
     height=h; 
     thread=new MyThread(getHolder(),this); 
     getHolder().addCallback(this); 
     setFocusable(true); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.ball_green); 
     canvas.drawColor(Color.BLUE);//To make background 
     canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null); 


    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     x=(int)event.getX(); 
     y=(int)event.getY(); 

     if(x<25) 
       x=25; 
     if(x> width) 
       x=width; 
     if(y <25) 
       y=25; 
     if(y > 405) 
       y=405;  
     return true; 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 

     thread.startrun(true); 
     thread.start(); 

    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 


     thread.startrun(false); 
     thread.stop(); 

    } 
} 

धागा:

public class MyThread extends Thread { 

private SurfaceHolder msurfaceHolder; 
private BallView mballView; 
private boolean mrun =false; 

public MyThread(SurfaceHolder holder, BallView ballView) { 

    msurfaceHolder = holder; 
    mballView=ballView; 
} 

public void startrun(boolean run) { 

    mrun=run; 
} 

@Override 
public void run() { 

    super.run(); 
    Canvas canvas; 
    while (mrun) { 
     canvas=null; 
     try { 
      canvas = msurfaceHolder.lockCanvas(null); 
       synchronized (msurfaceHolder) { 
       mballView.onDraw(canvas); 
      } 
     } finally { 
       if (canvas != null) { 
       msurfaceHolder.unlockCanvasAndPost(canvas); 
      } 
     } 
    } 
    } 

} 
+0

आपको एक नया उत्तर पोस्ट करने के बजाय अपना पहला जवाब संपादित करना चाहिए ... – WarrenFaith

+0

वे मेरे लिए दो अलग-अलग उत्तरों की तरह दिखते हैं, @WarrenFaith। डिस्प्ले को अद्यतन रखने के लिए एक धागा है, और कोई उपयोगकर्ता क्रियाओं के लिए इंतजार कर रहा है। जब तक प्रत्येक उत्तर पूरा हो जाता है, मुझे एक से अधिक पोस्ट करने में कुछ भी गलत नहीं लगता है। –

+0

क्या आप जानते थे कि BallView को एसडीकार्ड में एक छवि के रूप में कैसे सहेजना है? – chemalarrea

12

TouchBall जवाब देने के लिए एक मामूली संशोधन के रूप में - यदि आप वास्तव में एक खेल पाश की जरूरत नहीं है - दूसरे शब्दों में, स्क्रीन करने के लिए केवल परिवर्तन की वजह से सीधे कर रहे हैं उपयोगकर्ता इनपुट - तो यह थ्रेड छोड़ने के लिए और अधिक समझ सकता है। अन्यथा यह कुछ भी बदल गया है, भले ही यह लगातार लूपिंग और redrawing है। तो:

public class TouchBall extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     int w=getWindowManager().getDefaultDisplay().getWidth()-25; 
     int h=getWindowManager().getDefaultDisplay().getHeight()-25; 

     BallView ballView=new BallView(this,w,h); 
     setContentView(ballView); 
    } 
} 

public class BallView extends SurfaceView implements SurfaceHolder.Callback { 
    private Bitmap bitmap ; 
    private int x=20,y=20;int width,height; 

    public BallView(Context context,int w,int h) { 
     super(context); 

     width=w; 
     height=h; 
     getHolder().addCallback(this); 
     setFocusable(true); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.ball_green); 
     canvas.drawColor(Color.BLUE);//To make background 
     canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     x=(int)event.getX(); 
     y=(int)event.getY(); 

     if(x<25) 
      x=25; 
     if(x> width) 
      x=width; 
     if(y <25) 
      y=25; 
     if(y > 405) 
      y=405; 

     updateBall(); 

     return true; 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
    } 

    private void updateBall() { 
     Canvas canvas = null; 
     try { 
      canvas = getHolder().lockCanvas(null); 
      synchronized (getHolder()) { 
       this.onDraw(canvas); 
      } 
     } 
     finally { 
      if (canvas != null) { 
       getHolder().unlockCanvasAndPost(canvas); 
      } 
     } 
    } 
} 

मान्य है, मैं एंड्रॉइड विकास के लिए नया हूं, इसलिए मुझे यहां कुछ याद आ रहा है।