隐藏时,Android ImageView会引发OnClick事件

问题描述 投票:3回答:2

我有几个关于android视图的问题。我是新手,所以如果我的问题看起来很荒谬,请给我正确的提示:)所以我正在尝试制作记忆游戏。这是我的mainLayout代码。

<?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设置为每张卡片(pic_a1,pic_a2 ... pic_e5)和ImageView paPreviewView的可见性为隐形(我想要显示所选卡片的图像)。然后,当我点击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)我的第二个问题是。比我为这个例子做的更好的解决方案(我的意思是纸牌游戏)?

非常感谢任何想法:)

android click imageview show-hide onclicklistener
2个回答
1
投票

在这种情况下使用的正确函数是:

paPreviewView.setClickable(false);

0
投票

ImageView.setVisibility()只改变视图的“可见性”,它仍然有监听器注册。

您可以使用:

paPreviewView.setEnabled(false);

不接收点击事件。

© www.soinside.com 2019 - 2024. All rights reserved.