gpt4 book ai didi

android - 在 View 类 android 中加载布局 xml 文件

转载 作者:行者123 更新时间:2023-11-29 18:06:53 25 4
gpt4 key购买 nike

我有这门课:

public class MainActivity extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//LOAD MY LAYOUT
}
}

还有更多代码(很明显)。我有下一个用户界面:

enter image description here

我想画一条线来模拟图像之间的联合。

我试过:

Canvas canvas = new Canvas();
Paint paint = new Paint();
paint.setColor(Color.BLACK);
canvas.drawLine(0, 0, 300, 700, paint);

(以上只是测试我是否会画线。)但我无法绘制任何东西,因为当我在我的 Activity 中创建这样的 Canvas 时,它没有附加到任何东西,我只是在一个从来不属于屏幕的表面上绘图。

因此,我有以下类(class)。

public class MainActivity extends Activity  {
/** Called when the activity is first created. */
Paint mPaint;
float Mx1,My1;
float x,y;
@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView view1 =new MyView(this);
setContentView(view1);

mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeWidth(10);
}

public class MyView extends View {
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;

public MyView(Context c) {
super(c);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}

@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFAAAAAA);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}

private float mX, mY;
private static final float TOUCH_TOLERANCE = 4;

private void touch_start(float x, float y) {
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;
}
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mX = x;
mY = y;
}
}
private void touch_up() {
mPath.lineTo(mX, mY);
// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
// kill this so we don't double draw
mPath.reset();
}

@Override
public boolean onTouchEvent(MotionEvent event){
float x = event.getX();
float y = event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
touch_start(x, y);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
touch_move(x, y);
invalidate();
break;
case MotionEvent.ACTION_UP:
touch_up();
invalidate();
break;
}
return true;
}
}
}

这是我找到的一个例子。在 View 类中的方法:

setContentView(R.layout.main);

不起作用。

我的问题是:如何在扩展的 View 类中加载我的 UI(我已将其设置为图像)?因为在示例中我只是加载了一个空屏幕。我不知道如何加载我的布局文件.xml

感谢您的帮助!!!

最佳答案

我想我解决了我的问题。

我扩展了一个 LinearLayout 而不是 View 类。

public class MyView extends LinearLayout{
public MyView(Context c) {
super(c);
LayoutInflater inflater = (LayoutInflater) c.getSystemService(c.LAYOUT_INFLATER_SERVICE);
addView(inflater.inflate(R.layout.union, null));
}
}

有了这个我可以加载我的布局。现在,我将尝试画线。我希望这对遇到同样问题的其他人有用。

(编辑):但现在我无法划清界限。我尝试使用扩展 Activity 类中的下一个代码:

Canvas canvas = new Canvas();
MyView.onDraw(canvas);

我在扩展的 LinearLayout 类中有下一个代码:

public void onDraw(Canvas canvas) {
canvas.drawLine(0, 0, 9900, 9900, paint);
}

我可以在整个 UI 下画线吗?

((再次编辑))我找到了我的解决方案:

public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
canvas.drawLine(0, 0, 9900, 9900, paint);
}

如果我调用 onDraw 方法,我会在 UI“下方”画一条线,但如果我调用 dispatchDraw(),我会在用户界面上方画一条线,我可以看到这条线。我希望这对其他人非常有用。

关于android - 在 View 类 android 中加载布局 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12998774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com