Dies ist eine schwierige Situation zu beschreiben, also bitte bitte mit mir. Ich habe ein ‚Trainer Marken‘ Bildschirm ein wenig wie diese gefragt zu machen: sieAndroid - Zeichnung ImageView genau auf der vorhandenen Ansicht in der tieferen Schicht
Allerdings habe ich in meinem Fall müssen ‚Pull‘ einige der zugrunde liegenden Bilder auf die Vorder und angezeigt werden in einer anderen Farbe, um sie hervorzuheben. Ich kann nicht bestimmen, was der 'Rahmen' dieser Bilder vor der Laufzeit sein wird. Mein Ansatz ist es, eine schwarze, halb-undurchsichtige Ansicht (ich nenne es einen Vorhang) für den gesamten Bildschirm hinzuzufügen und dann die Bilder, die ich brauche, als Unteransichten des Vorhangs mit einer anderen Farbe hinzuzufügen. EDIT Dieser Teil ist einfach und ich bitte nicht um Hilfe (weshalb der Vorschlag, dass dies ein Duplikat der vorgeschlagenen Frage ist, falsch ist).
Ich glaube nicht, dass ich bringToFront()
oder setTranslationZ()
weil diese Methoden nicht den ImageView
den ganzen Weg an die Front meines Vorhangs bringen kann. Also, was ich versuche zu tun ist, um den genauen "Rahmen" der Bildansicht (x, y, Breite und Höhe) relativ zum gesamten Bildschirm zu bekommen und dann versuchen, die neue Bildansicht mit dem gleichen hinzuzufügen mit demselben Rahmen zeichnen.
Es ist auch wichtig zu wissen, dass die zugrunde liegende "Ansicht" tatsächlich aus mehreren Ansichten (einschließlich einer Schublade) besteht, weshalb ich die Koordinaten relativ zum Bildschirm erhalten muss. Ich hoffe das macht Sinn.
Ich kann die neue ImageView
als Unteransicht des Vorhangs mit der richtigen Farbe zeichnen, aber die Position und Größe des Bildes ist weg. Wie kann ich diese neue ImageView
genau auf die vorherige zeichnen?
Ich bin auch offen für andere Strategien (seit dieser scheint nicht zu funktionieren). Danke für jede Hilfe.
@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);
}
Mögliches Duplikat von [Wie in Android transparent Aktivität erstellen?] (Http://stackoverflow.com/questions/16332064/how-to-create-transparent-activity-in-android) – user5599807
try [diese] (http : // Pastebin.com/dg4CXx0f) – pskink
@ user5599807 - kein Duplikat. Dieser Beitrag stellt nur eine sehr einfache Frage, wie man eine Ansicht mit einem halbtransparenten Hintergrund zeichnet. Ich mache das schon (leicht). Meine Frage bezieht sich darauf, wie Kinderansichten auf diese neue Ansicht in einer präzisen Position und mit einer genauen Größe platziert werden. – Alex