为了账号安全,请及时绑定邮箱和手机立即绑定

谁能帮我看一下,我的代码有什么问题吗?一直画不出三角形

public class ViewPagerTittleView extends LinearLayout {

    private static final String TAG = "View";
    private Paint mPaint;
    private Path mPath;
    private int mWidth;
    private int mHeight;

    private static final float WIDTH_RADIO = 1/6f;
    private int mInitTransX;
    private int mTransX;


    public ViewPagerTittleView(Context context) {
        this(context,null);
    }

    public ViewPagerTittleView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.parseColor("#ffffff"));
        Log.d("View", "ViewPagerTittleView: ***********");


    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.save();
        canvas.translate(mInitTransX+mTransX,getHeight());
        canvas.drawPath(mPath,mPaint);
        canvas.restore();
        Log.d(TAG , "dispatchDraw: *****");
        super.dispatchDraw(canvas);

    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);

        mWidth = (int) (w/3*WIDTH_RADIO);
        mHeight = mWidth/2;
        mInitTransX = w/3/2-mWidth/2;
        initTriangle();

        Log.d(TAG, "onSizeChanged: ********");
        Log.d(TAG, "onSizeChanged: mWidth = "+mWidth+"   mInitTranslationX = "+mInitTransX+
                "  mHeight = "+mHeight);
    }

    /**
     * 初始化三角形
     */
    private void initTriangle() {

        mPath = new Path();
        mPath.moveTo(0,0);
        mPath.lineTo(mWidth,0);
        mPath.lineTo(mWidth/2,-mHeight);
        mPath.close();
        Log.d("View", "initTriangle:*************** ");

    }
}


正在回答

3 回答

我的代码能显示,你可以对比下,主要注意下位置是不是设置得有问题,超出显示区域的话是看不到的,还有颜色如果一样也是看不出来的

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.CornerPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.widget.LinearLayout;


public class MyViewPagerIndicator extends LinearLayout {

    private Paint paint;//画笔
    private Path path;//用Path类型绘制三角形
    private int triangleWidth, triangleHeight;//三角形的宽高
    public static final float SCALE_TRIANGLE_WIDTH = 1 / 6f;//宽度为每个tab宽度的1/6
    private int initPositionX, movePositionX;//初始位置,移动的位置


    public MyViewPagerIndicator(Context context) {
        super(context, null);
    }

    public MyViewPagerIndicator(Context context, AttributeSet attrs) {
        super(context, attrs);
        //初始化画笔
        paint = new Paint();
        paint.setAntiAlias(true);//抗锯齿
        paint.setColor(Color.parseColor("#FFF7C533"));
        paint.setStyle(Paint.Style.FILL);//填充式画笔
        paint.setPathEffect(new CornerPathEffect(3));//设置ath特效(转角弯曲),这样画出来的三角形就不会太尖锐
    }

    /**
     * 绘制三角形
     */
    @Override
    protected void dispatchDraw(Canvas canvas) {
        canvas.save();
        canvas.translate(initPositionX + movePositionX, getHeight());
        canvas.drawPath(path, paint);//arg1被画的类型,arg2画笔
        System.out.println("-------dispatchDraw:init,move,w,h---------" + "init:" + initPositionX + "_move:" + movePositionX + "_w:" + triangleWidth + "_h:" + triangleHeight);
        canvas.restore();
        super.dispatchDraw(canvas);
    }

    /**
     * view的size发生变化时调用,可以通过此方法得到view的宽高
     */
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        triangleWidth = (int) (w / 3 * SCALE_TRIANGLE_WIDTH);//三角形的宽度
        triangleHeight = triangleWidth / 2;
        initPositionX = w / 3 / 2 - triangleWidth / 2;//三角形的位置
        initTriangle();//初始化三角形
        System.out.println("-------x:initPos---------" + initPositionX);
        System.out.println("-------x:width---------" + triangleWidth);
        System.out.println("-------x:height---------" + triangleHeight);
    }

    /**
     * 初始化三角形
     */
    private void initTriangle() {
        //通过Path构造三角形
        path = new Path();
        path.moveTo(0, 0);//三角形左下点
        path.lineTo(triangleWidth, 0);//三角形右下点
        path.lineTo(triangleWidth / 2, -triangleHeight);//三角形上顶点
        path.close();

    }

}


0 回复 有任何疑惑可以回复我~

我的也出不来效果

1 回复 有任何疑惑可以回复我~

那你能画出什么,貌似这段没有问题~

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-自定义ViewPager指示器
  • 参与学习       30028    人
  • 解答问题       75    个

带领大家实现最火爆的跟随型指示器,学完保准压倒一片

进入课程

谁能帮我看一下,我的代码有什么问题吗?一直画不出三角形

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信