如何绘制的片段? [英] How to Draw in fragment?
问题描述
我已经创建动作条
我的应用程序与 viewpager
和它工作正常。现在,我想提请每个片段一些对象。任何人都可以提出关于如何在片段画一个很好的教程或样品code。我可以在MyClass的延伸活动,但我不知道该怎么办时,它延伸片段在我的视图中绘制的对象。
我已经试过这code到现在,但它不能正常工作
公共类MoviesFragment扩展片段{ImageView的ImageView的;
位图位图;位图位;
帆布油画;
涂料粉刷;
公共类DrawView扩展视图{
涂料粉刷=新的油漆(); 公共DrawView(上下文的背景下){
超级(上下文);
paint.setColor(Color.BLACK);
}
公共DrawView(上下文的背景下,ATTRS的AttributeSet){
超(背景下,ATTRS);
paint.setColor(Color.BLACK);
}
公共DrawView(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){
超(背景下,ATTRS,defStyle);
paint.setColor(Color.BLACK);
} @覆盖
保护无效的onDraw(帆布油画){
super.onDraw(画布); ImageView的=(ImageView的)this.findViewById(R.id.imageView);
位= BitmapFactory.de codeResource(getResources(),R.drawable.ic_launcher);
位图= Bitmap.createBitmap(宽度,高度,Bitmap.Config.ARGB_8888);
帆布=新的Canvas(位图);
canvas.drawBitmap(位图,0,0,空);
油漆=新的油漆();
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(3);
imageView.setImageBitmap(位图);
canvas.drawLine(0,0,250,250,油漆);
canvas.drawLine(50,0,0,50,漆);imageView.invalidate();
} @覆盖
保护无效onMeasure(INT widthMeasureSpec,诠释heightMeasureSpec){
super.onMeasure(widthMeasureSpec,heightMeasureSpec); INT上级宽度= MeasureSpec.getSize(widthMeasureSpec);
INT上级高度= MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(上级宽度,上级高度);
}
}
@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
super.onCreateView(充气器,容器,savedInstanceState); 查看rootView = inflater.inflate(R.layout.fragment_movies,集装箱,FALSE);
返回rootView;}}
有什么特别在这里片段。
写在片段code -
公共类DrawFragment扩展片段{
DrawView drawView; 公共DrawFragment(){
} / **
*返回DrawFragment的实例
*
* DrawFragment的@return实例
* /
公共静态DrawFragment的getInstance(){
DrawFragment片段=新DrawFragment();
fragment.setRetainInstance(真);
返回片段;
} @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
查看_view = inflater.inflate(R.layout.layout_drawing_fragment,
集装箱,FALSE);
//让保持DrawView的参考
drawView =(DrawView)_view.findViewById(R.id.drawing);
返回_view;
}
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
} @覆盖
公共无效onActivityCreated(捆绑savedInstanceState){
super.onActivityCreated(savedInstanceState);
} @覆盖
公共无效的onDestroy(){
super.onDestroy();
}
}
code活性 onCreateView()
只是为了─
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.layout_base_activity);
//设置绘制片段
mFragmentManager = getFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mDrawFragment = DrawFragment.getInstance();
mFragmentTransaction.add(R.id.frame_drawing,mDrawFragment,画);
mFragmentTransaction.commit();
}
片段的布局 -
<的RelativeLayout的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools
机器人:ID =@ + ID /父
机器人:layout_width =FILL_PARENT
机器人:layout_height =match_parent> < com.app.widgets.DrawView
机器人:ID =@ + ID /绘图
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:layout_marginBottom =3DP
机器人:layout_marginLeft =5DP
机器人:layout_marginRight =5DP
机器人:layout_marginTop =3DP
机器人:背景=@机器人:彩色/透明>
< /com.app.widgets.DrawView>< / RelativeLayout的>
编辑:检查下面的画布上画线链接 -
块引用>I have created
Actionbar
for my app withviewpager
and it works properly. Now I want to draw some objects on each fragment. Can anyone suggest a good tutorial or sample code on how to draw on fragment. I can draw objects on my view when myclass extends Activity but I don't know what to do when it extends Fragment.I have tried this code till now but it does not work
public class MoviesFragment extends Fragment { ImageView imageView; Bitmap bitmap; Bitmap bit; Canvas canvas; Paint paint; public class DrawView extends View { Paint paint = new Paint(); public DrawView(Context context) { super(context); paint.setColor(Color.BLACK); } public DrawView(Context context, AttributeSet attrs) { super(context, attrs); paint.setColor(Color.BLACK); } public DrawView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); paint.setColor(Color.BLACK); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); imageView = (ImageView)this.findViewById(R.id.imageView); bit= BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); bitmap=Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap); canvas.drawBitmap(bitmap,0,0,null); paint = new Paint(); paint.setFlags(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.BLACK); paint.setStrokeWidth(3); imageView.setImageBitmap(bitmap); canvas.drawLine(0, 0, 250, 250, paint); canvas.drawLine(50, 0, 0, 50, paint); imageView.invalidate(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ super.onMeasure(widthMeasureSpec, heightMeasureSpec); int parentWidth = MeasureSpec.getSize(widthMeasureSpec); int parentHeight = MeasureSpec.getSize(heightMeasureSpec); this.setMeasuredDimension(parentWidth, parentHeight); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View rootView = inflater.inflate(R.layout.fragment_movies, container, false); return rootView; } }
解决方案There is nothing special with fragment here.
Code written in Fragment -
public class DrawFragment extends Fragment { DrawView drawView; public DrawFragment() { } /** * Returns Instance of DrawFragment * * @return Instance of DrawFragment */ public static DrawFragment getInstance() { DrawFragment fragment = new DrawFragment(); fragment.setRetainInstance(true); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View _view = inflater.inflate(R.layout.layout_drawing_fragment, container, false); //lets keep a reference of DrawView drawView = (DrawView ) _view.findViewById(R.id.drawing); return _view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onDestroy() { super.onDestroy(); } }
Code of Activity
onCreateView()
only-@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_base_activity); // set Draw Fragment mFragmentManager = getFragmentManager(); mFragmentTransaction = mFragmentManager.beginTransaction(); mDrawFragment = DrawFragment.getInstance(); mFragmentTransaction.add(R.id.frame_drawing, mDrawFragment, "draw"); mFragmentTransaction.commit(); }
Layout of Fragment -
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/parent" android:layout_width="fill_parent" android:layout_height="match_parent" > <com.app.widgets.DrawView android:id="@+id/drawing" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="3dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="3dp" android:background="@android:color/transparent" > </com.app.widgets.DrawView> </RelativeLayout>
EDIT: Check following links for drawing lines on Canvas -
这篇关于如何绘制的片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!