布局在onTouch()内部不起作用

时间:2012-05-25 15:39:29

标签: android android-layout android-linearlayout

我正在使用两个ImageView创建一个Activity。

第一个ImageView在启动时占据了屏幕的一部分,我想要显示另一个ImageView,其内容是我触摸第一个图像和顶部的区域周围的裁剪。

班级:

public class DetectEyesActivity extends Activity  implements OnTouchListener {  
private ImageView imgView;
private Bitmap imgBitmap;

private ImageView touchView2;
private Bitmap temp;

@Override
public void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.detecteyeslayout);

    Intent intent = this.getIntent();
    byte[] image = intent.getByteArrayExtra("Image");

    imgView = (ImageView) findViewById(R.id.detectImageView1);
    touchView2 = (ImageView) findViewById(R.id.detectImageView2);

    imgBitmap = BitmapFactory.decodeByteArray(image, 0, image.length);
    imgView.setImageBitmap(imgBitmap);   

    temp = Bitmap.createBitmap(imgBitmap, 200, 200, 200, 200);
    //touchView2.setImageBitmap(temp);

    imgView.setOnTouchListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    int y = (int)event.getY();
    int x = (int)event.getX();

    temp = Bitmap.createBitmap(imgBitmap, 200,200, 200, 200);
    touchView2.setImageBitmap(temp);
    touchView2.setVisibility(0);
    touchView2.bringToFront();
    touchView2.layout(x-200, y-200, x-30, y-30);

    return true;
}

}

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/detectImageView1"
        android:layout_width="400dp"
        android:layout_height="400dp" />

    <ImageView
        android:id="@+id/detectImageView2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:visibility="gone" />
</LinearLayout>

但是当我打电话时

touchView2.setImageBitmap(temp);

在onTouch()内部,视图绘制在布局上的初始图像下方。但是如果我在onCreate()中调用它,它会被绘制在初始图像的顶部吗?

为什么会发生这种情况,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

据我了解你的问题,你希望你的一个图像叠加在另一个上。 LinearLayouts以水平或垂直线显示其子项。这不适合用于您的案例,因为它不允许多个子节点占用相同的空间。我尝试使用相对或帧布局。

此外,您最初将第二张图片的可见性设置为gone,因此不是第一张图片正在其上绘制,而是第二张图片不是&#39 ;直到你在onTouch中拨打setVisibility,才会被抽出。