添加子视图时无法单击按钮?

时间:2014-05-21 17:18:01

标签: android

当我使用子视图时,根视图中的按钮被禁用。我无法点击它们。 我正在尝试开发通过连接按钮和线来进行输入的应用程序。如果用户想要进入 然后他必须通过用线连接按钮来触摸按钮。它与android模式非常相似 开锁。但是在我们的应用中代替网格点,将显示数字。

activity_demo_main:

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rty" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".DemoMainActivity" >

   <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />
   <Button
    android:id="@+id/button1"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:layout_marginLeft="222.08203dp"
    android:layout_marginTop="270.53426dp"

    android:text="1" />

   <Button
    android:id="@+id/button2"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:layout_marginLeft="162.08203dp"
    android:layout_marginTop="314.12678dp"

    android:text="2" />
    <Button
    android:id="@+id/button3"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:layout_marginLeft="87.917960dp"
    android:layout_marginTop="314.12678dp"

    android:text="3" />
    <Button
    android:id="@+id/button4"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:layout_marginLeft="27.917960dp"
    android:layout_marginTop="270.53423dp"

    android:text="4" />


    </RelativeLayout>

DemoMainActivity.java:

package com.example.demo;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.RelativeLayout;

    public class DemoMainActivity extends Activity {
 RelativeLayout rl;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_demo_main);
     rl = (RelativeLayout)findViewById(R.id.rty);


    Button b1=(Button)findViewById(R.id.button2);
     final NewPattern b = new NewPattern(this);
    b1.setOnClickListener(new View.OnClickListener() {

        @SuppressLint("NewApi")
        @Override
        public void onClick(View arg0) {
            try{
                rl.getRootView();
                rl.addView(b);



            }
                catch(Exception ex){}

        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.demo_main, menu);
    return true;
}

    }

NewPattern.java:

 package com.example.demo;
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.view.MotionEvent;
 import android.view.View;
 import android.widget.Button;
 //import com.example.newpattern.PatternMainActivity;
 import android.widget.RelativeLayout;

public class NewPattern extends View 
{
private Paint m_paint;
private static Bitmap m_bitmap;
private Canvas m_canvas;
private Path m_path;
private Paint m_bitmapPaint;
private DisplayMetrics m_metrics;
private int m_color = 0xFFFF0000;
static boolean m_pathDrawn = false;
private float m_X, m_Y;
private static final float TOUCH_TOLERANCE = 4;
Button b1 = (Button)findViewById(R.id.button1);
Button b2 = (Button)findViewById(R.id.button2);

RelativeLayout  rl = (RelativeLayout)findViewById(R.id.rty);


@SuppressLint("NewApi")
private void touchman(float g, float h){
final float btn1x = b1.getX();
//float btn2x= b1.getY();
if(g==btn1x){
    rl.getRootView();
}
}
public NewPattern(Context context, AttributeSet attrs) {
super(context, attrs);
//Your code
// btn1.setText("fdsf");
}

public NewPattern(Context p_c)
{
super(p_c);
try{

 m_paint = new Paint();
 m_paint.setAntiAlias(true);
 m_paint.setDither(true);
 m_paint.setColor(m_color);
 /*new ColorPickerDialog(p_c, new OnColorChangedListener()
 {
 public void colorChanged(int p_color)
 {
     m_paint.setColor(p_color);
     m_color = p_color;
 }
 }, 0xFFFF0000).show();*/
m_paint.setStyle(Paint.Style.STROKE);
m_paint.setStrokeJoin(Paint.Join.ROUND);
m_paint.setStrokeCap(Paint.Cap.ROUND);
m_paint.setStrokeWidth(12);
m_metrics = p_c.getResources().getDisplayMetrics();
m_bitmap =
     Bitmap.createBitmap(m_metrics.widthPixels, m_metrics.heightPixels,
             Bitmap.Config.ARGB_8888);
m_canvas = new Canvas(m_bitmap);
m_path = new Path();
m_bitmapPaint = new Paint(Paint.DITHER_FLAG);
}
catch(Exception ex){}}

public void onerase()
{
m_canvas = null; 
}

@Override
protected void onSizeChanged(int p_w, int p_h, int p_oldw, int p_oldh)
{
super.onSizeChanged(p_w, p_h, p_oldw, p_oldh);
}


@Override
protected void onDraw(Canvas p_canvas)
{try{

p_canvas.drawColor(0x00000000);
p_canvas.drawBitmap(m_bitmap, 0, 0, m_bitmapPaint);
p_canvas.drawPath(m_path, m_paint);}
catch(Exception ex){}

}
@SuppressLint("NewApi")
private void touch_start(float p_x, float p_y)
{//try{
 m_path.reset();
 m_path.moveTo(p_x, p_y);
 m_X = p_x;
 m_Y = p_y;

 //}
//catch(Exception ex){}
 }

 private void touch_move(float p_x, float p_y)
 {try{
 float m_dx = Math.abs(p_x - m_X);
 float m_dy = Math.abs(p_y - m_Y);
 if (m_dx >= TOUCH_TOLERANCE || m_dy >= TOUCH_TOLERANCE)
 {
 m_path.quadTo(m_X, m_Y, (p_x + m_X) / 2, (p_y + m_Y) / 2);
 m_X = p_x;
 m_Y = p_y;
 m_pathDrawn = true;
}}
catch(Exception ex){}
}

private void touch_up()
{try{
m_path.lineTo(m_X, m_Y);
// commit the path to our offscreen
m_canvas.drawPath(m_path, m_paint);
// kill this so we don't double draw
m_path.reset();
}
catch(Exception ex){}
}
@SuppressLint("NewApi")
@Override
public boolean onTouchEvent(MotionEvent p_event)
{try{

float m_x = p_event.getX();
float m_y = p_event.getY();
switch (p_event.getAction())
 {
     case MotionEvent.ACTION_DOWN:

         touch_start(m_x, m_y);
         //touchman(m_x, m_y);

         invalidate();
         break;
     case MotionEvent.ACTION_MOVE:


         touch_move(m_x, m_y);
        // touchman(m_x, m_y);
         invalidate();
         break;
     case MotionEvent.ACTION_UP:

         touch_up();
         //touchman(m_x, m_y);
         invalidate();
         break;
 }
return true; 
}
catch(Exception ex){}
return true;
}}

0 个答案:

没有答案
相关问题