Đây là một tình huống khó khăn để mô tả, vì vậy hãy chịu với tôi. Tôi đã được yêu cầu làm cho màn hình một 'vết HLV' một chút như thế này:Android - vẽ ImageView chính xác trên đầu trang của chế độ xem hiện tại trong lớp sâu hơn
Tuy nhiên, trong trường hợp của tôi, tôi cần phải 'kéo' một số hình ảnh cơ bản vào phía trước và hiển thị chúng trong một màu sắc khác nhau để làm cho chúng nổi bật. Tôi không thể xác định xem 'khung hình' của những hình ảnh này sẽ trước thời gian chạy. Cách tiếp cận của tôi là thêm một cái nhìn đen, bán đục (tôi gọi nó là một 'bức màn') che phủ toàn bộ màn hình, và sau đó thêm những hình ảnh mà tôi cần làm các bức tranh phụ của bức màn với một màu khác. EDIT Phần này rất dễ dàng và tôi không yêu cầu trợ giúp với điều này (đó là lý do tại sao đề xuất rằng đây là bản sao của câu hỏi được đề xuất không chính xác).
Tôi không tin rằng tôi có thể sử dụng bringToFront()
hoặc setTranslationZ()
vì những phương pháp này sẽ không mang lại cho ImageView
tất cả các cách để trước màn của tôi. Vì vậy, những gì tôi đang cố gắng làm là lấy chính xác 'khung' của chế độ xem hình ảnh (x, y, chiều rộng và chiều cao) tương ứng với màn hình tổng thể và sau đó thử thêm chế độ xem hình ảnh mới bằng cách sử dụng drawable với cùng một khung. Một điều cũng quan trọng là phải biết rằng 'chế độ xem' cơ bản thực sự được tạo thành từ nhiều chế độ xem (bao gồm ngăn kéo trượt), đó là lý do tại sao tôi cần phải nhận tọa độ tương đối so với màn hình. Tôi hy vọng điều này có ý nghĩa.
Tôi có thể vẽ ImageView
mới làm màn hình con của màn với màu sắc chính xác, nhưng vị trí và kích thước của hình ảnh bị tắt. Làm cách nào để tôi có thể vẽ chính xác số ImageView
mới này lên đầu trang trước đó?
Tôi cũng mở cho các chiến lược khác (vì chiến lược này có vẻ không hoạt động). Cảm ơn bạn đã giúp đỡ.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
ViewTreeObserver vto = mRootview.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mRootview.getViewTreeObserver().removeOnGlobalLayoutListener(this);
mDrawerLayout.openDrawer(Gravity.LEFT);
RelativeLayout curtain = addOpaqueCurtainToRootView();
int frame[] = getFrameOfExistingImageView();
addNewImageViewOnTopOfEverything(curtain, frame);
}
});
}
private RelativeLayout addOpaqueCurtainToRootView() {
RelativeLayout curtain = new RelativeLayout(context);
RelativeLayout.LayoutParams curtainParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
curtain.setLayoutParams(curtainParams);
curtain.setBackgroundColor(Color.argb(179, 0, 0, 0)); //70% opaque
mRootview.addView(curtain);
return curtain;
}
private int[] getFrameOfExistingImageView() {
// proving that I have a reference to the original image
mCurrentImage.setColorFilter(Color.rgb(255, 0, 0));
int array[] = new int[2];
mCurrentImage.getLocationOnScreen(array);
Log.d(TAG, "width: " + Integer.toString(array[0]));
Log.d(TAG, "height: " + Integer.toString(array[1]));
Log.d(TAG, "x: " + Float.toString(mCurrentImage.getX()));
Log.d(TAG, "y: " + Float.toString(mCurrentImage.getY()));
int frame[] = new int[4]; // x,y,width,height
frame[0] = (int)mCurrentImage.getX();
frame[1] = (int)mCurrentImage.getY();
frame[2] = array[0];
frame[3] = array[1];
return frame;
}
private void addNewImageViewOnTopOfEverything(RelativeLayout curtain, int[] frame) {
ImageView iv = new ImageView(context);
iv.setImageResource(R.drawable.imgView);
iv.setColorFilter(Color.rgb(255, 255, 255));
iv.setX(frame[0]);
iv.setY(frame[1]);
iv.setLayoutParams(new RelativeLayout.LayoutParams(frame[2], frame[3]));
curtain.addView(iv);
}
Bản sao có thể có của [Cách tạo hoạt động trong suốt trong android?] (Http://stackoverflow.com/questions/16332064/how-to-create-transparent-activity-in-android) – user5599807
thử [this] (http : // pastebin.com/dg4CXx0f) – pskink
@ user5599807 - không trùng lặp. Bài đăng đó chỉ hỏi một câu hỏi rất đơn giản, đó là cách vẽ một khung nhìn với nền nửa trong suốt. Tôi đã làm điều đó (dễ dàng). Câu hỏi của tôi là về cách đặt chế độ xem con trên chế độ xem mới ở vị trí chính xác và với kích thước chính xác. – Alex