2012-09-11 21 views
3

我有幾個關於android視圖的問題。我是新手,所以如果我的問題看起來很荒謬,請給我正確的提示:) 所以我試圖讓記憶遊戲。這是我的mainLayout的代碼。Android ImageView在隱藏時引發OnClick事件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainPanel" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android.background="Color.TRANSPARENT" 
    android:gravity="top" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/top_panel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="2dp" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Blaaaaaa1" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Blaaaaaa2" /> 
    </LinearLayout> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:ems="3" 
     android:inputType="textPassword" 
     android:text="dsdsdsd" 
     android:visibility="invisible" > 

     <requestFocus /> 
    </EditText> 

    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/top_panel" 
     android:paddingBottom="50dp" 
     android:paddingTop="5dp" 
     android:weightSum="5" > 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:weightSum="5" > 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_a1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_a2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_a3" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_a4" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_a5" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 
     </TableRow> 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:weightSum="5" > 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_b1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_b2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_b3" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_b4" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_b5" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 
     </TableRow> 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:weightSum="5" > 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_c1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_c2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_c3" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_c4" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_c5" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 
     </TableRow> 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:weightSum="5" > 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_d1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_d2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_d3" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_d4" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_d5" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 
     </TableRow> 

     <TableRow 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:weightSum="5" > 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_e1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_e2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_e3" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_e4" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/pic_e5" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ic_launcher" /> 
      </LinearLayout> 
     </TableRow> 

     <TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 
     </TableRow> 
    </TableLayout> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:src="@drawable/pic9214" /> 

</RelativeLayout> 

這裏是mainActivity的代碼。

public class MainActivity extends Activity { 
    private OnClickListener paSharedOnClickListener = new OnClickListener(); 
    private ImageView paPreviewView ; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     getWindow().setBackgroundDrawableResource(R.drawable.old_paper_r); 



     ImageView img; 

     img = (ImageView) MainActivity.this.findViewById(R.id.imageView1) ; 
     img.setVisibility(-1); 
     this.paPreviewView = img; 

     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_a1); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_a2); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_a3); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_a4); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_a5); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_b1); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_b2); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_b3); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_b4); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_b5); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_c1); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_c2); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_c3); 
     img.setVisibility(-1); 
     img = (ImageView) findViewById(R.id.pic_c4); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_c5); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_d1); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_d2); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_d3); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_d4); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_d5); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_e1); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_e2); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_e3); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_e4); 
     img.setOnClickListener(paSharedOnClickListener); 
     img = (ImageView) findViewById(R.id.pic_e5); 
     img.setOnClickListener(paSharedOnClickListener); 

    } 


    private class OnClickListener implements View.OnClickListener 
    { 
     private boolean paIsPreviewShowed = false; 

     public void onClick(View arg0) 
     { 

      ImageView img = (ImageView)arg0; 

      Log.v("Click", String.format("ID %s %s", img.getId() , (ImageView) MainActivity.this.findViewById(R.id.imageView1) == img)); 


      if (!this.paIsPreviewShowed) 
      { 

       this.paIsPreviewShowed = true; 

       Animation fadeIn = new AlphaAnimation(0, 1); 
       fadeIn.setDuration(150); 


       AnimationSet animationSet = new AnimationSet(true); 

       ScaleAnimation scaleAnim = new ScaleAnimation(0,1,0,1,Animation.RELATIVE_TO_SELF, (float)0.5, Animation.RELATIVE_TO_SELF, (float)0.5); 
       scaleAnim.setInterpolator(new LinearInterpolator()); 
       scaleAnim.setRepeatCount(Animation.ZORDER_NORMAL); 
       scaleAnim.setDuration(250); 

       TranslateAnimation move = new TranslateAnimation(0, 0, 500,0); 
       move.setDuration(250); 


       animationSet.addAnimation(fadeIn); 
       animationSet.addAnimation(scaleAnim); 
       animationSet.setFillAfter(true); 





       Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.pic9012); 
       if (paPreviewView.getParent()==null) 
       { 
        RelativeLayout top_panel = (RelativeLayout) MainActivity.this.findViewById(R.id.mainPanel); 
        top_panel.addView(paPreviewView); 
       } 
       paPreviewView.setImageBitmap(bMap); 
       paPreviewView.startAnimation(animationSet); 


      }else 
      { 

       Animation fadeOut = new AlphaAnimation(1, 0); 
       fadeOut.setFillAfter(true); 
       fadeOut.setDuration(250); 
       paPreviewView.startAnimation(fadeOut); 
       this.paIsPreviewShowed = false; 

       ((RelativeLayout) paPreviewView.getParent()).removeView(paPreviewView); 
      } 

       } 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

好了,所以,在第一步驟之後創建的Activiti我OnClickListener設置到ImageView的paPreviewView的每一張牌(pic_a1,pic_a2 ... pic_e5)和可見性,以無形的(這裏我想選擇卡的顯示圖像)。然後,當我點擊pic_a1 paPreviewView顯示。還行吧。 我的問題是。

1)在我這個例子中,我躲在paPreviewView ImageView的早期版本通過調用

paPreviewView.setVisibility(View.INVISIBLE); 

paPreviewView.setVisibility(View.GONE); 

,但它並沒有正常工作。因爲方法OnClickListener.onClick只能從隱藏的paPreviewView ImageView中調用。所以我試圖從paPreviewView中刪除OnClickListener,但它沒有幫助。只有工作解決方案是刪除(用於隱藏)並添加(用於顯示)從/到mainPanel的paPreviewView。

我的問題是爲什麼?爲什麼paPreviewView在隱藏paPreviewView時引發onClick事件?

2)而我的第二個問題是。比我爲這個例子(我的意思是紙牌遊戲)更好的解決方案?

非常感謝任何想法:)

回答

0

ImageView.setVisibility()只改變視圖的「可視性」,它仍然註冊到監聽。

可以使用

paPreviewView.setEnabled(false); 

不接收單擊事件。

+0

感謝這有助於:) – Droid

1

在這種情況下,使用正確的函數是:

paPreviewView.setClickable(false);