gpt4 book ai didi

android - 如何绘制三角形并将其添加到相对或线性布局android

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:56:54 25 4
gpt4 key购买 nike

我正在开发小型 Android 应用程序,我在其中使用我的自定义线性布局类。在那堂课上,我试图画一个小三角形,并试图将它包含在我的线性布局中,但我做不到。我尝试了以下方法......

@SuppressLint("DrawAllocation")
public class SimpleLin extends LinearLayout {
public String TAG = "CustomviewActivity";
LinearLayout parentLayout;

public SimpleLin(Context context)
{
super(context);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(inflater != null){
view = inflater.inflate(R.layout.main2, this);d.lin_llt);
parentLayout.setBackgroundResource(R.drawable.bcd);

}

}

public SimpleLin(Context context, AttributeSet attrs) {

super( context, attrs );

context1= context;
}

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);
Log.i("############################", "inside ondraw");
Paint p = new Paint();
p.setStyle(Style.FILL);
p.setColor(Color.RED);
Point point = new Point();
point.x = 80;
point.y = 80;
Path path = getEquilateralTriangle(point, 70, Direction.SOUTH);
Bitmap b = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
canvas.drawPath(path, p);
}
public static Path getEquilateralTriangle(Point p1, int width, Direction direction) {
Point p2 = null, p3 = null;

if (direction == Direction.NORTH) {
p2 = new Point(p1.x + width, p1.y);
p3 = new Point(p1.x + (width / 2), p1.y - width);
}
else if (direction == Direction.SOUTH) {
p2 = new Point(p1.x + width,p1.y);
p3 = new Point(p1.x + (width / 2), p1.y + width);
}
else if (direction == Direction.EAST) {
p2 = new Point(p1.x, p1.y + width);
p3 = new Point(p1.x - width, p1.y + (width / 2));
}
else if (direction == Direction.WEST) {
p2 = new Point(p1.x, p1.y + width);
p3 = new Point(p1.x + width, p1.y + (width / 2));
}

Path path = new Path();
path.moveTo(p1.x, p1.y);
path.lineTo(p2.x, p2.y);
path.lineTo(p3.x, p3.y);

return path;
}
public enum Direction
{
NORTH, SOUTH, EAST, WEST;
}

@SuppressWarnings("deprecation")
public void initialiseImages()
{
invalidate();
}
}

我正在从我想使用此自定义布局的 Activity 中调用 initialiseImages 方法。所以问题是当我使用 invalidate() 时它没有调用我的 on draw 方法。这就是为什么它不绘制我的三角形。而且我也很困惑如何将该三角形包含到我的 parentlayout..我的代码有错吗..如何在android中绘制这样的形状...需要帮忙...谢谢...

最佳答案

自定义线性布局的代码(我修改了你的代码,让你更容易理解)

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.LinearLayout;

/**
* @author Atrix1987
*
*/
public class CustomView extends LinearLayout {

/**
* @param context
*/
public CustomView(Context context) {
super(context);
commonConstructor(context);
}

/**
* @param context
* @param attrs
*/
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
commonConstructor(context);
}

/**
*
*/
Paint trianglePaint;
/**
*
*/
Path trianglePath;

/**
* @param context
*/
private void commonConstructor(Context context) {
trianglePaint = new Paint();
trianglePaint.setStyle(Style.FILL);
trianglePaint.setColor(Color.RED);
Point point = new Point();
point.x = 80;
point.y = 80;
trianglePath = getEquilateralTriangle(point, 70, Direction.SOUTH);
}

@Override
protected void onDraw(Canvas canvas) {

Log.i("Sample", "inside ondraw");
//avoid creating objects in onDraw
canvas.drawPath(trianglePath, trianglePaint);
}

private Path getEquilateralTriangle(Point p1, int width, Direction direction) {
Log.i("Sample", "inside getEqui");
Point p2 = null, p3 = null;

if (direction == Direction.NORTH) {
p2 = new Point(p1.x + width, p1.y);
p3 = new Point(p1.x + (width / 2), p1.y - width);
} else if (direction == Direction.SOUTH) {
p2 = new Point(p1.x + width, p1.y);
p3 = new Point(p1.x + (width / 2), p1.y + width);
} else if (direction == Direction.EAST) {
p2 = new Point(p1.x, p1.y + width);
p3 = new Point(p1.x - width, p1.y + (width / 2));
} else if (direction == Direction.WEST) {
p2 = new Point(p1.x, p1.y + width);
p3 = new Point(p1.x + width, p1.y + (width / 2));
}

Path path = new Path();
path.moveTo(p1.x, p1.y);
path.lineTo(p2.x, p2.y);
path.lineTo(p3.x, p3.y);

return path;
}

public enum Direction {
NORTH, SOUTH, EAST, WEST;
}

}

Activity 的代码(为简单起见,作为快捷方式,我这样做了,您也可以在 xml 中指定它,只需 setContentView):

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

/**
* @author Atrix1987
*
*/
public class SampleActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

CustomView cv = new CustomView(getApplicationContext());
cv.setBackgroundColor(Color.WHITE);
setContentView(cv, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}

}

一定要浏览开发者网站 links用于自定义 View ,以获得更多见解。

希望这对您有所帮助。

PFB截图The screenshot from the sample i ran

关于android - 如何绘制三角形并将其添加到相对或线性布局android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15150701/

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