0

我正在创建一个带有两个 ImageView 的 Activity。

第一个 ImageView 在启动时占据屏幕的一部分,我想显示另一个 ImageView,其内容是在我触摸第一个 Image 的区域及其顶部的裁剪区域。

班级:

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() 中调用它,它会被绘制在初始图像之上吗?

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

4

1 回答 1

0

据我了解您的问题,您希望将一张图像叠加在另一张图像上。LinearLayouts 以水平或垂直线显示其子级。对于您的情况,这不是一个很好的 ViewGroup,因为它不允许多个子项占用相同的空间。我会尝试相对或框架布局。

此外,您将第二个图像的可见性设置为gone最初,因此不是第一个图像被绘制在它上面,而是第二个图像根本没有被绘制,直到您调用setVisibilityonTouch。

于 2012-05-25T17:10:50.800 回答