当我使用子视图时,根视图中的按钮被禁用。我无法点击它们。 我正在尝试开发通过连接按钮和线来进行输入的应用程序。如果用户想要进入 然后他必须通过用线连接按钮来触摸按钮。它与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;
}}