2013-08-02 104 views
1

下面的代碼:onTouchListener一個ImageView的需要點擊兩次工作,另一個只有一次

public class MainActivity extends Activity implements OnTouchListener { 

    RelativeLayout rl; 
    int i, j = 0; 
    final int imageArray[] = { R.drawable.w1, R.drawable.w2, R.drawable.w3 }; 
    int image; 
    final int imageCount = 3; 

    ImageView back, save, next; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_layout); 

     final int imageArray[] = { R.drawable.w1, R.drawable.w2, R.drawable.w3 }; 
     image = imageArray[0]; 

     rl = (RelativeLayout) findViewById(R.id.rlBackground); 

     back = (ImageView) findViewById(R.id.bBack); 
     save = (ImageView) findViewById(R.id.bSave); 
     next = (ImageView) findViewById(R.id.bNext); 

     back.setOnTouchListener(this); 
     save.setOnTouchListener(this); 
     next.setOnTouchListener(this); 

    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 

     switch (v.getId()) { 
     case R.id.bBack: 
      if (j == 0) { 
       j = imageCount; 
      } 
      image = imageArray[j - 1]; 
      rl.setBackgroundResource(image); 
      j = j - 1; 
      break; 
     case R.id.bSave: 
      BitmapFactory.Options opts = new BitmapFactory.Options(); 
      opts.inSampleSize = 2; 
      Bitmap bm = BitmapFactory.decodeResource(getResources(), image, 
        opts); 
      // savePicture(bm, "image_name.jpg"); 
      SaveImage savefile = new SaveImage(); 
      savefile.SaveImagee(this, bm); 
      Toast.makeText(getApplicationContext(), 
        "Image saved on your gallery!", Toast.LENGTH_LONG).show(); 
      break; 

     case R.id.bNext: 
      if (j != imageCount) { 
       rl.setBackgroundResource(imageArray[j]); 
       image = imageArray[j]; 
       j = j + 1; 
      } else { 
       j = 0; 
       rl.setBackgroundResource(imageArray[j]); 
       image = imageArray[j]; 
       j = j + 1; 
      } 
      break; 

     } 

     return false; 
    } 
} 

的問題:如果我點擊保存按鈕它適用於第一次點擊。如果我點擊下一個按鈕,我需要點擊兩次才能觸發該功能,但在此之後,如果我繼續點擊下一個按鈕,只需點擊一下即可。但是當我切換到按鈕後,它需要點擊兩次,然後只有一次,如果我切換回到下一個按鈕,同樣的發生 - 兩次,一次..我想這與焦點有關。

如果我改變我的ImageViewImageButton,它觸發功能的兩倍,如果我添加的,如果statemt (event.getAction() == MotionEvent.ACTION_DOWN)後來我又必須按一下按鈕兩次。我想按鈕與一個工作單擊所有的時間。我不明白爲什麼會這樣,因爲保存按鈕作品只需點擊一下,所有的時間..

編輯:如果我改變

image = imageArray[j]; 

image = imageArray[2]; 

則按鈕首先點擊工作,但我無法得到它。

+3

你爲什麼不使用onclicklistener? –

+0

「如果我將ImageView更改爲ImageButton,它會觸發該函數兩次,」如果您更改爲onClick()而不是onTouch()',這是真的嗎? – codeMagic

+0

您的bNext的其他塊始終會導致'j'等於'1'。那真的是你想要的嗎? –

回答

0

我發現我設置ImageCount = 3,但在陣列它從0開始計數,我編程的值在這個程序的開始和餘因子評分它不能錯。

-1

你真的應該使用一個OnClickListener,

,但也許那是因爲你沒有告訴你已處理的觸摸事件的系統。嘗試在處理觸摸事件時返回true,否則返回false。例如:

switch (v.getId()) { 
    case R.id.bBack: 
     if (j == 0) { 
      j = imageCount; 
     } 
     image = imageArray[j - 1]; 
     rl.setBackgroundResource(image); 
     j = j - 1; 
     return true; 
    default: 
     return false; 
+0

我之前使用過OnClickListener,但我被告知要使用onTouch來解決我的問題,現在我被告知要使用onClick,問題仍然是一樣的。而你的回答並沒有解決我的問題,同樣的情況仍然發生。 – user1816780

相關問題