綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] 請問該怎讓圖反彈回原來位置?

[複製連結] 查看: 1038|回覆: 3|好評: 0
跳轉到指定樓層
樓主
deenya | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2013-5-13 18:25

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
我想請問一下,我讓A移動到A1(如圖),B移到B1(如圖),如果大小一樣就黏住不再移動,不一樣就彈回原來的位置
請問該怎做才好?
因為我反彈回去後都不是原先位置
麻煩請各位高手教我

附上代碼
public class PlayFirst extends Activity implements OnTouchListener{
        private ImageView moveimage[]=new ImageView[7];
        private ImageView pictimage[]=new ImageView[7];
        private        ImageView demo;

        private ImageView ima;
        private ImageView ima1;
        private ImageView ima2;
        private ImageView ima3;
        private ImageView ima4;
        private ImageView ima5;
        private ImageView ima6;
        private ImageView ima7;
        private Button    backbtn;
        private Button    homebtn;
       
        private int moveIma[] = { R.id.imageView1, R.id.imageView2,
                        R.id.imageView3, R.id.imageView4, R.id.imageView5, R.id.imageView6,
                        R.id.imageView7 };

        private int imaView[] = { R.id.imageVieW8, R.id.imageView9,
                        R.id.ImageView10, R.id.ImageView11, R.id.ImageView12,
                        R.id.ImageView13, R.id.ImageView14 };
       
        private int mode = 0;
        private static final int MODE_DRAG = 1;// 拖曳狀態
        private PointF startPoint = new PointF();
        private Matrix matrix = new Matrix();
        private Matrix currentMatrix = new Matrix(); // 當前矩陣
        int array[] = new int[7];
        int ary[]=new int[7];
        private TranslateAnimation trans;
       
        DisplayMetrics dm;
        int ScreenX,ScreenY;
        int width,height;
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.first_play);
                final        AbsoluteLayout Absolute = (AbsoluteLayout) findViewById(R.id.absol);

                dm=new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(dm);
                ScreenX=dm.widthPixels;
                ScreenY=dm.heightPixels;
               
               
                backbtn=(Button)findViewById(R.id.backbtn);
                backbtn.setOnClickListener(new View.OnClickListener() {
                       
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                Intent intent=new Intent();
                                intent.setClass(PlayFirst.this, Directory.class);
                                startActivity(intent);
                                PlayFirst.this.finish();        
                        }
                });
               
                homebtn=(Button)findViewById(R.id.homebtn);
                homebtn.setOnClickListener(new View.OnClickListener() {
                       
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                Intent intent=new Intent();
                                intent.setClass(PlayFirst.this, Tangram.class);
                                startActivity(intent);
                                PlayFirst.this.finish();        
                        }
                });               
                               
                moveimage[0] = ima=new ImageView(this);
                moveimage[1] = ima1=new ImageView(this);
                moveimage[2] = ima2=new ImageView(this);
                moveimage[3] = ima3=new ImageView(this);
                moveimage[4] = ima4=new ImageView(this);
                moveimage[5] = ima5=new ImageView(this);
                moveimage[6] = ima6=new ImageView(this);
       
               
                for(int x=0;x<7;x++){
                           moveimage[x] = (ImageView) findViewById(moveIma[x]);          
                }
                for(int x=0;x<7;x++){
                demo=moveimage[x] ;
                demo.setOnTouchListener(this);       
                   width= (int)demo.getX();
                   height= (int)demo.getY();
                }
                for(int x=0;x<=6;x++){
                        pictimage[x] = (ImageView) findViewById(imaView[x]);
                        pictimage[x].setAlpha(100);       
                }                       
        }
       
       
        public boolean onTouch(View v, MotionEvent event) {
                 ImageView myimage = (ImageView) v;
                   AbsoluteLayout.LayoutParams p = null;
       
          switch (event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_DOWN:       
                        mode = MODE_DRAG;
                        currentMatrix.set(myimage.getImageMatrix());
                        startPoint.set(event.getX(), event.getY());
                        break;   
                       
                case MotionEvent.ACTION_MOVE:
                        if (mode == MODE_DRAG) {   
                                float dx = event.getX() - startPoint.x;
                                float dy = event.getY() - startPoint.y;   
                                  p = new AbsoluteLayout.LayoutParams(
                                                        AbsoluteLayout.LayoutParams.WRAP_CONTENT,
                                                        AbsoluteLayout.LayoutParams.WRAP_CONTENT,
                                                        myimage.getLeft() + (int) dx,(int) (myimage.getTop() + dy));       
                                  

                                        myimage.setLayoutParams(p);                       
                                        myimage.setFocusableInTouchMode(false);
                        }       
                                       
                        break;
                          
                case MotionEvent.ACTION_UP:       
                        float dX = event.getX() - startPoint.x;
                        float dY = event.getY() - startPoint.y;            
                       
                        int defaultX= ((ScreenX-width)/2)+myimage.getLeft();
                        int defaultY= ((ScreenY-height)/2)+myimage.getTop();                                         

                if (dX !=0 || dY !=0) {
                                trans = new TranslateAnimation(dX, 0, dY, defaultY+dY);

                                trans.setDuration(100);
                                myimage.startAnimation(trans);      
                                myimage.setFocusable(false);
                                myimage.setFocusableInTouchMode(false);
                        }
                  
               
                       
                case MotionEvent.ACTION_POINTER_UP:
                        mode = 0;
                        break;               
                }               
          return true;
        }      
            

}
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
ploglin | 收聽TA | 只看該作者
發表於 2013-5-14 09:33
程式太長就不細看了。
在第1次touch的時候把當時圖片的 x,y 值存起來,彈回去的時候就套用那個值就好了?
不知道有沒有幫助。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
lbmc0623 | 收聽TA | 只看該作者
發表於 2013-5-18 16:00
謝謝大大分享囉!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
iamjason008 | 收聽TA | 只看該作者
發表於 2013-5-21 18:54
可能抓到的x y座標是相對位置
所以每次回去都不是原先位置
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則