preVIEW自定义视图集成 - Android的 [英] Preview Custom View integration- Android

查看:128
本文介绍了preVIEW自定义视图集成 - Android的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在自定义视图不显示在我的相机preVIEW。想不通的原因。code运行正常,只有圆不借鉴it.Googled一样好,但没有帮助呢。

主类

 公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
。getWindow()addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);MD =(MyDrawing)findViewById(R.id.Drawing);myContext =这一点;
初始化();
}

}

XML类

 <?XML版本=1.0编码=UTF-8&GT?;
 <的FrameLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:方向=横向
机器人:baselineAligned =假><的FrameLayout
    机器人:方向=垂直
    机器人:layout_width =404dp
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_gravity =开始|底>    <按钮
        机器人:ID =@ + ID / button_capture
        机器人:layout_width =348dp
        机器人:layout_height =WRAP_CONTENT
        机器人:文字=捕捉/停止
        机器人:layout_gravity =CENTER_HORIZONTAL |底
        />< /&的FrameLayout GT;<的FrameLayout
    机器人:ID =@ + ID / camera_ preVIEW
    机器人:layout_width =match_parent
    机器人:layout_height =504dp
    机器人:方向=横向>    < com.java codegeeks.androidvideocaptureexample.MyDrawing
        机器人:ID =@ + ID /绘图
        机器人:layout_width =192dp
        机器人:layout_height =200dp
        机器人:方向=横向
        机器人:layout_gravity =中心/>< /&的FrameLayout GT;
< /&的FrameLayout GT;

自定义视图

 公共类MyDrawing扩展视图{  帆布油画;
  INT瓦;
  INT H;  私有静态最终诠释DEFAULT_CIRCLE_COLOR = Color.RED;  私人INT circleColor = DEFAULT_CIRCLE_COLOR;
  私人涂料粉刷;  公共MyDrawing(上下文的背景下){
    超级(上下文);    的init(背景下,NULL);
  }公共MyDrawing(上下文的背景下,ATTRS的AttributeSet)
{
    超(背景下,ATTRS);
    的init(背景下,ATTRS);
}私人无效的init(上下文的背景下,ATTRS的AttributeSet)
{
    油漆=新的油漆();
    paint.setAntiAlias​​(真);
}私人无效onMeasure()
{
     W =的getWidth()/ 2;
     H =的getHeight()/ 2;
}@覆盖
保护无效的onDraw(帆布油画)
{
    super.onDraw(画布);   // INT W =的getWidth()/ 2;
   // INT H =的getHeight()/ 2;    INT PL = getPaddingLeft();
    INT PR = getPaddingRight();
    INT PT = getPaddingTop();
    INT PB = getPaddingBottom();    INT usableWidth = W -​​ (PL + PR);
    INT usableHeight = H - (PT + PB);    INT半径= Math.min(usableWidth,usableHeight)/ 2;
    INT CX = PL +(usableWidth / 2);
    INT CY = PT +(usableHeight / 2);    paint.setColor(circleColor);
    canvas.drawCircle(CX,CY,半径,油漆);
}
}


解决方案

图层顺序是什么,我失踪了。只是用相对布局和主要活动code改变它。结果是尤里卡!

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:方向=横向
机器人:baselineAligned =假><的FrameLayout
    机器人:ID =@ + ID / camera_ preVIEW
    机器人:layout_width =303dp
    机器人:layout_height =470dp
    机器人:方向=横向
    机器人:layout_alignParentRight =真
    机器人:layout_alignParentEnd =真
    机器人:layout_alignParentLeft =真
    机器人:layout_alignParentStart =真
    机器人:layout_alignParentTop =真
    机器人:layout_alignBottom =@ + ID /绘图>< /&的FrameLayout GT;<按钮
    机器人:ID =@ + ID / button_capture
    机器人:layout_width =393dp
    机器人:layout_height =92dp
    机器人:文字=捕捉/停止
    机器人:layout_gravity =CENTER_HORIZONTAL |底
    机器人:layout_alignParentBottom =真
    机器人:layout_alignParentLeft =真
    机器人:layout_alignParentStart =真/>< com.java codegeeks.androidvideocaptureexample.MyDrawing
    机器人:ID =@ + ID /绘图
    机器人:layout_width =500dp
    机器人:layout_height =507dp
    机器人:方向=横向
    机器人:layout_alignParentTop =真
    />
  < / RelativeLayout的>

The custom view is not displaying on my camera preview. Can't figure out the reason.Code runs fine, only the circle is not drawing on it.Googled it as well but no help yet.

Main Class

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

md = (MyDrawing)findViewById(R.id.Drawing);

myContext = this;
initialize();
}

}

XML Class

 <?xml version="1.0" encoding="utf-8"?>
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:baselineAligned="false">

<FrameLayout
    android:orientation="vertical"
    android:layout_width="404dp"
    android:layout_height="wrap_content"
    android:layout_gravity="start|bottom">

    <Button
        android:id="@+id/button_capture"
        android:layout_width="348dp"
        android:layout_height="wrap_content"
        android:text="Capture/Stop"
        android:layout_gravity="center_horizontal|bottom"
        />

</FrameLayout>

<FrameLayout
    android:id="@+id/camera_preview"
    android:layout_width="match_parent"
    android:layout_height="504dp"
    android:orientation="horizontal">

    <com.javacodegeeks.androidvideocaptureexample.MyDrawing
        android:id="@+id/Drawing"
        android:layout_width="192dp"
        android:layout_height="200dp"
        android:orientation="horizontal"
        android:layout_gravity="center" />

</FrameLayout>


</FrameLayout>

Custom View

  public class MyDrawing extends View {

  Canvas canvas;
  int w;
  int h;

  private static final int DEFAULT_CIRCLE_COLOR = Color.RED;

  private int circleColor = DEFAULT_CIRCLE_COLOR;
  private Paint paint;

  public MyDrawing(Context context) {
    super(context);

    init(context, null);
  }



public MyDrawing(Context context, AttributeSet attrs)
{
    super(context, attrs);
    init(context, attrs);
}

private void init(Context context, AttributeSet attrs)
{
    paint = new Paint();
    paint.setAntiAlias(true);
}

private void onMeasure()
{
     w = getWidth()/2;
     h = getHeight()/2;
}

@Override
protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);

   // int w = getWidth()/2;
   // int h = getHeight()/2;

    int pl = getPaddingLeft();
    int pr = getPaddingRight();
    int pt = getPaddingTop();
    int pb = getPaddingBottom();

    int usableWidth = w - (pl + pr);
    int usableHeight = h - (pt + pb);

    int radius = Math.min(usableWidth, usableHeight) / 2;
    int cx = pl + (usableWidth / 2);
    int cy = pt + (usableHeight / 2);

    paint.setColor(circleColor);
    canvas.drawCircle(cx, cy, radius, paint);
}


}

解决方案

The layer order was what i was missing. Just used Relative Layout and changed it in Main Activity code as well. Results were "EUREKA" !

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:baselineAligned="false">

<FrameLayout
    android:id="@+id/camera_preview"
    android:layout_width="303dp"
    android:layout_height="470dp"
    android:orientation="horizontal"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_alignBottom="@+id/Drawing">

</FrameLayout>

<Button
    android:id="@+id/button_capture"
    android:layout_width="393dp"
    android:layout_height="92dp"
    android:text="Capture/Stop"
    android:layout_gravity="center_horizontal|bottom"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<com.javacodegeeks.androidvideocaptureexample.MyDrawing
    android:id="@+id/Drawing"
    android:layout_width="500dp"
    android:layout_height="507dp"
    android:orientation="horizontal"
    android:layout_alignParentTop="true"
    />


  </RelativeLayout>

这篇关于preVIEW自定义视图集成 - Android的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆