无法通过Android中的textview单元格正确地在gridview元素上绘制线条

无法通过Android中的textview单元格正确地在gridview元素上绘制线条,第1张

概述我想实现Word Search应用程序.作为实现的一部分,我遇到了网格视图单元格(形成单词的字母)上的画布和绘制线,以指示用户正在用手指触摸字母以形成单词. 我已经部分成功到现在为止我可以在网格视图的字母上画一条线,但该线不是通过网格视图的视图中心. 请任何人帮助我提出宝贵的建议. 浏览下面的屏幕截图以获得清晰的想法. 编辑:我正在发布代码,以了解我是如何实现它的. XML: <RelativeL 我想实现Word Search应用程序.作为实现的一部分,我遇到了网格视图单元格(形成单词的字母)上的画布和绘制线,以指示用户正在用手指触摸字母以形成单词.

我已经部分成功到现在为止我可以在网格视图的字母上画一条线,但该线不是通过网格视图的视图中心.

请任何人帮助我提出宝贵的建议.

浏览下面的屏幕截图以获得清晰的想法.

编辑:我正在发布代码,以了解我是如何实现它的.

XML:

<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"androID:ID="@+ID/root"androID:layout_wIDth="fill_parent"androID:layout_height="fill_parent"androID:background="#fff" ><relativeLayout    androID:ID="@+ID/topbar"    androID:layout_wIDth="match_parent"    androID:layout_height="wrap_content"    androID:layout_alignParenttop="true"    androID:background="#A9E2F3" >    <linearLayout        androID:ID="@+ID/topbar"        androID:layout_wIDth="fill_parent"        androID:layout_height="wrap_content"        androID:background="#336699"        androID:orIEntation="horizontal" >        <button            androID:ID="@+ID/btn_pause"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="Pause" />        <Chronometer            androID:ID="@+ID/chronometer1"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:text="Chronometer" />        <TextVIEw            androID:ID="@+ID/counter"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:gravity="center_horizontal"            androID:textSize="20sp"            androID:typeface="serif" />    </linearLayout></relativeLayout><FrameLayout    androID:ID="@+ID/grIDFrame"    androID:layout_wIDth="fill_parent"    androID:layout_height="wrap_content"    androID:layout_above="@+ID/wtable"    androID:layout_below="@+ID/textdisplay" >    <GrIDVIEw        androID:ID="@+ID/grID"        androID:layout_wIDth="fill_parent"        androID:layout_height="wrap_content"        androID:background="#E7E8E9"        androID:fitsSystemwindows="true"        androID:gravity="center"        androID:horizontalSpacing="10sp"        androID:numColumns="10"        androID:padding="1dp"        androID:stretchMode="columnWIDth"        androID:verticalSpacing="10sp" >    </GrIDVIEw></FrameLayout><GrIDVIEw    androID:ID="@+ID/wtable"    androID:layout_wIDth="fill_parent"    androID:layout_height="wrap_content"    androID:layout_alignParentBottom="true"    androID:background="#fff"    androID:numColumns="3"    androID:orIEntation="vertical" />  </relativeLayout>

绘图正在绘制包含网格视图的框架布局.网格视图元素通过自定义文本视图文件打印.

要绘制一条线,我使用了lineVIEw.java

import androID.content.Context;import androID.graphics.Canvas;import androID.graphics.color;import androID.graphics.Paint;import androID.util.Log;import androID.vIEw.VIEw;public class lineVIEw extends VIEw {public static final float liNE_WIDTH = 30.0f;public Paint paint = new Paint();protected Context context;public float startingX,startingY,endingX,endingY;public lineVIEw(Context context) {    super(context);    this.context = context;    paint.setcolor(color.parsecolor("#2E9AFE"));    paint.setstrokeWIDth(liNE_WIDTH);    paint.setstrokeJoin(Paint.Join.ROUND);    paint.setstrokeCap(Paint.Cap.ROUND);    paint.setDither(true);    paint.setAntiAlias(true);    paint.setStyle(Paint.Style.FILL);    paint.setAlpha(90);}public voID setPoints(float startX,float startY,float endX,float endY) {    startingX = startX;    startingY = startY;    endingX = endX;    endingY = endY;    invalIDate();}@OverrIDepublic voID onDraw(Canvas canvas) {    Log.e("liNEVIEW","startingX" + startingX + "  startingY:" + startingY);    Log.e("liNEVIEW","endingX" + endingX + "  endingY:" + endingY);    // canvas.drawline(startingX,endingY,paint);    canvas.drawline(startingX,paint);}}Main Activity where logic is implemented: Written only the required logic here. newGrID = (GrIDVIEw) findVIEwByID(R.ID.grID);    newGrID.setAdapter(new FormTheGrIDLetters());    newGrID.setontouchListener(new OntouchListener() {        @OverrIDe        public boolean ontouch(VIEw v,MotionEvent event) {            // if (mp.isPlaying()) {            // mp.stop();            // }            int action = event.getActionMasked();            switch (action) {                case MotionEvent.ACTION_DOWN:                case MotionEvent.ACTION_MOVE:                case MotionEvent.ACTION_UP:                    // data                    PaintVIEwHolder newPaint = new PaintVIEwHolder();                    newPaint.Drawline = new lineVIEw(wordsearchActivity.this);                    grIDFrame.addVIEw(newPaint.Drawline);                    builDWord = new StringBuilder();                    int x = (int) event.getX();                    int y = (int) event.getY();                    // test = new lineVIEw(wordsearchActivity.this);                    int position = newGrID.pointToposition(x,y);                    Point one,two;                    if (position != GrIDVIEw.INVALID_position) {                        v.getParent().requestdisallowIntercepttouchEvent(true);                        cellVIEw = (TextVIEw) newGrID.getChildAt(position);                        String a = cellVIEw.getText().toString();                        // Log.v(">>>>><<<<<<<????????",a.toString());                        switch (action) {                            case MotionEvent.ACTION_DOWN:                                startX = event.getX();                                startY = event.getY();                                break;                            case MotionEvent.ACTION_MOVE:                                break;                            case MotionEvent.ACTION_UP:                              // Checking the List for formed word ;                                                       //if found that is painted                                for (int i1 = 0; i1 < Ans.size(); i1++)                                {                                    if (formeDWord.equals(Ans.get(i1)))                                    {                     answerAdapter.notifyDataSetChanged();                     newPaint.Drawline.setPoints(startX,startY,x,y);               // Painted the letters by passing starting and ending points                                     }                                }                                break;                        }                    } else {                        if (mSelecting) {                            mSelecting = false;                        }                    }                    break;                case MotionEvent.ACTION_CANCEL:                    mSelecting = false;                    break;            }            return true;        }    });
解决方法 我不知道你是否解决了这个问题,但无论如何我会回答可能有这些问题的人.收到有效位置后,您可以获得视图的中心,并可以将这些值设置为绘制的开始.

像这样:

if (position != GrIDVIEw.INVALID_position) {        MyList.add(position);        v.getParent().requestdisallowIntercepttouchEvent(true);        TextVIEw cellVIEw = (TextVIEw) grIDVIEw.getChildAt(position);         centreX = cellVIEw.getX() + cellVIEw.getWIDth()  / 2;         centreY = cellVIEw.getY() + cellVIEw.getHeight() / 2;    switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            newPaint.Drawline.touch_start(x,y,centreX,centreY);

我试过这个代码,它正在运行.我不认为你需要了,但我最近加入了这个网站,所以也许它会帮助其他人.如果你愿意,我可以发布更多代码

newPaint.Drawline.touch_start(x,centreY);

是这个问题的诀窍.希望这可以帮助.

总结

以上是内存溢出为你收集整理的无法通过Android中的textview单元格正确地在gridview元素上绘制线条全部内容,希望文章能够帮你解决无法通过Android中的textview单元格正确地在gridview元素上绘制线条所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存