2016-06-24 9 views
-2

すべてのデバイスの正確な位置にボタンを配置するために、カスタムビューでボタンを作成しました。ボタンは画面の小さな部分を占めますが、実際のビューはほとんどの画面を占めます。ボタンの周りのすべての領域は透明です。透明な領域をクリックして下のボタンをクリックしても、ビューのボタン領域をクリックできるようにするにはどうすればよいですか?ここでAndroid - カスタムビューの透過領域をクリックする方法

はrelavantコードです:

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); 
} 


} 
+0

いくつかのコードで質問を充実させてください。正確な答えを与えることはほとんどありません。 –

+0

コードが質問に追加されました。 –

答えて

0

あなたはあなたのビューclickableを設定する必要がありますし、すべてのonTouchを上書きするか、単にそれからfalseを返しません。戻り値falseは、イベントを消費せず、ビュー階層の次の要素に転送されることを意味します。

+0

私はonTouchを試しています。しかし、私はビューに階層があるとは思わないので、これを行うことで下のビューがクリックされることはありません。 –

+0

@BeauCarnes、いくつかの目的のために親にマッチするボタン( 'MyView?')であなたの意見はありますか?そうでなければ、 'myLayout.addView(myView、new LayoutParams(LayoutParams.WRAP_CONTENT、LayoutParams.WRAP_CONTENT)));でビューを追加してください。 'wrap_content'を設定し、viewはコンテンツのサイズになります –

関連する問題