Um eine Schaltfläche in der genauen Stelle auf allen Geräten zu positionieren, habe ich es mit einer benutzerdefinierten Ansicht erstellt. Die Schaltfläche nimmt einen kleinen Teil des Bildschirms ein, aber die eigentliche Ansicht nimmt den größten Teil des Bildschirms ein. Der gesamte Bereich um den Button ist transparent. Wie kann ich dem Benutzer erlauben, durch den transparenten Bereich auf die darunter liegenden Schaltflächen zu klicken, aber trotzdem auf den Schaltflächenbereich in der Ansicht zu klicken? HierAndroid - Wie man durch den transparenten Bereich der benutzerdefinierten Ansicht klickt
ist der relavant Code:
public class MainActivity extends AppCompatActivity {
final float dotScale = 0.3f;
Dot dot1, dot2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
RelativeLayout myLayout = (RelativeLayout) findViewById(R.id.mainView);
MyView myView = new MyView(this);
myLayout.addView(myView);
// Two dots are created.
dot1 = new Dot(this);
dot1.xOffset = 2.9f;
dot1.yOffset = 3.3f;
myLayout.addView(dot1);
dot2 = new Dot(this);
dot2.xOffset = -2.4f;
dot2.yOffset = 1.1f;
myLayout.addView(dot2);
// Makes dots clickable
dot1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!dot1.isClicked) {
dot1.animate().setDuration(300).setInterpolator(new AnticipateInterpolator())
.scaleXBy(dotScale).scaleYBy(dotScale).alpha(1.0f);
dot1.isClicked = true;
}
}
});
dot2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!dot2.isClicked) {
dot2.animate().setDuration(300).setInterpolator(new AnticipateInterpolator())
.scaleXBy(dotScale).scaleYBy(dotScale).alpha(1.0f);
dot2.isClicked = true;
}
}
});
}
.......
//custom view for Dots
class Dot extends View {
int radius;
float xOffset;
float yOffset;
boolean isClicked = false;
public Dot(Context context) {
super(context);
setClickable(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int x = getWidth();
int y = getHeight();
double ratio = (547d/828d);
float circleX = (float)((x/2) - (y * ratio)/xOffset);
float circleY = (float)(y/yOffset);
radius = (int)((float)y/13);
setPivotX(circleX);
setPivotY(circleY);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawCircle(circleX, circleY, radius, paint);
}
}
Bitte bereichern Sie Ihre Frage mit etwas Code, es ist kaum möglich, Ihnen eine genaue Antwort zu geben –
Code zur Frage hinzugefügt. –