J'ai deux boutons: 1 et 2. Le premier bouton est situé dans le centre de mise en page et la deuxième traduction de la volonté en utilisant setTranslationX and setTranslationY
Le code est pour c'estsetTranslationX et setTranslationY font la mauvaise position de Button dans Android. Pourquoi?
btn1 = (Button) findViewById(R.id.btn1);
setRotateButton(btn1,2,1);
btn2 = (Button) findViewById(R.id.btn2);
setRotateButton(btn2,2,2);
où setRotateButton
est
public void setRotateButton(Button btn,int numViews,int index)
{
//Locate button in center
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(130, 130);
lp.gravity = Gravity.CENTER;
btn.setLayoutParams(lp);
//Translation
if (index>1) //To avoid first case
{
float angleDeg = index * 360.0f/numViews - 90.0f;
float angleRad = (float)(angleDeg * Math.PI/180.0f);
btn.setTranslationX(400 * (float)Math.cos(angleRad));
btn.setTranslationY(400 * (float)Math.sin(angleRad));
}
}
J'ai trouvé un problème: lorsque j'utilise setTranslationX,setTranslationY
, l'emplacement du bouton 2 peut être traduit vers un autre emplacement mais j'ai un mauvais numéro pour l'emplacement du bouton 2. Il renvoie toujours la même valeur. Pour le vérifier. J'utilise la méthode onTouch
(mainFrame est un FrameLayout où se trouvent ces deux boutons). Pourriez-vous m'aider à corriger la fonction dans setRotateButton
? Merci beaucoup.
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mainFrame.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
for (int i = 0; i < mainFrame.getChildCount(); i++) {
View current = mainFrame.getChildAt(i);
if (current instanceof Button) {
Button b = (Button) current;
Log.d("TAG","Btn pos:"+String.valueOf(b.getLeft())+";"+String.valueOf(b.getRight())+";"+String.valueOf(b.getTop())+";"+String.valueOf(b.getBottom()));
if (!isPointWithin(x, y, b.getLeft(), b.getRight(), b.getTop(),
b.getBottom())) {
b.getBackground().setState(defaultStates);
b.getBackground().setAlpha(255);
}
if (isPointWithin(x, y, b.getLeft(), b.getRight(), b.getTop(),
b.getBottom())) {
b.getBackground().setState(STATE_PRESSED);
b.getBackground().setAlpha(150);
b.performClick();
if (b != mLastButton) {
mLastButton = b;
}
}
}
}
return true;
}
});
}
Ce résultat est journal
Lorsque je déplace le doigt dans le bouton 1, et de passer à l'extérieur
09-15 00:15:50.981 20547-20547/com.example.circlelayout D/TAG: Btn pos:0;150;300;450
09-15 00:01:40.891 20547-20547/com.example.circlelayout D/TAG: Btn pos:397;527;485;615
Lorsque je déplace le doigt dans le bouton 2 et se déplacer à l'extérieur. Ils sont même valeur
09-15 00:01:40.891 20547-20547/com.example.circlelayout D/TAG: Btn pos:397;527;485;615
09-15 00:01:40.891 20547-20547/com.example.circlelayout D/TAG: Btn pos:397;527;485;615
09-15 00:01:40.891 20547-20547/com.example.circlelayout D/TAG: Btn pos:397;527;485;615