`

将子View画在父View的(x,y)处

    博客分类:
  • view
阅读更多

package com.example.tttt;

 


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;

 

/**
 * @author Administrator   将子View画在父View的(x,y)处
 *
 */
public class MyView extends View {
 public MyView(Context context, AttributeSet attrs) {
  super(context, attrs);
 }

 

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  TextView textView = new TextView(getContext());
  textView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT));
  textView.setText("hlldfdf");
  textView.setBackgroundColor(Color.RED);
  System.out.println("measure前"+textView.getMeasuredWidth()+"/"+textView.getMeasuredHeight()+"/"+textView.getWidth()+"/"+textView.getHeight());
  //不能少..........,不然textView.getWidth()==0,textView.getHeight()=0
  textView.measure(textView.getMeasuredWidth(),
    textView.getMeasuredHeight());
  System.out.println("measure后"+textView.getMeasuredWidth()+"/"+textView.getMeasuredHeight()+"/"+textView.getWidth()+"/"+textView.getHeight());
  textView.layout(0, 0, textView.getMeasuredWidth(),
    textView.getMeasuredHeight());
  System.out.println("layout后"+textView.getMeasuredWidth()+"/"+textView.getMeasuredHeight()+"/"+textView.getWidth()+"/"+textView.getHeight());
  //1.将子View转成bitmap=》drawBitmap
  //频繁生成bitmap容易内存溢出.............
  Bitmap bitmap = Bitmap.createBitmap(textView.getWidth(),
    textView.getHeight(), Bitmap.Config.ARGB_8888);
  Canvas canva = new Canvas(bitmap);
  textView.draw(canva);
  
  
  Paint paint = new Paint();
  canvas.drawBitmap(bitmap, 0, 100, paint);
  System.out.println("最后"+textView.getMeasuredWidth()+"/"+textView.getMeasuredHeight()+"/"+textView.getWidth()+"/"+textView.getHeight());
  //2.画布移动到指定位置...........
  //2.canvas.save()=>canva.translate(x,y)=>textView.draw(canvas)=>canvas.restore();
  canvas.save();
  canva.translate(0, 500);
  textView.draw(canvas);
  canvas.restore();
 }

 

}

 

 

 

package com.example.testviewpager;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {

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

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
 
  Paint paint = new Paint();
  paint.setColor(Color.RED);
  Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
    R.drawable.cat);
  Rect src = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
  RectF dst = new RectF(400, 400, 400 + bitmap.getWidth(),
    400 + bitmap.getHeight());
  //完整图片画出,坐标在(400,400)
  canvas.drawBitmap(bitmap, src, dst, paint);
  RectF dst2 = new RectF(400, 800, 400 + bitmap.getWidth() / 2,
    800 + bitmap.getHeight() / 2);
  //完整图片画出,坐标在(400,800),只是变小了,变成原图的一半大
  canvas.drawBitmap(bitmap, src, dst2, paint);
  //从原图的(0,50)这个点开始裁剪图片
  //从原图的(0,50)这个点开始裁剪图片
  //从原图的(0,50)这个点开始裁剪图片
  Rect src3 = new Rect(0, 50, bitmap.getWidth(), bitmap.getHeight());
  RectF dst3 = new RectF(800, 400, 800 + bitmap.getWidth()-0,
    400 + bitmap.getHeight()-50);
  canvas.drawBitmap(bitmap, src3, dst3, paint);
  
 }

}

 

 

0
1
分享到:
评论

相关推荐

    View坐标位置XY轴详解

    配套博客详解:http://blog.csdn.net/xiaohao0724/article/details/54965579

    自定义View--带有动画效果的柱状图

    自定义 View 有动画 递增效果 的 柱状图 ,具有 X Y轴标注,以及 动画递增效果

    自定义view 画线 可以拖动 也可以改变长度

    在一个容器里 添加多条直线,每个直线都是自定义view,自定义view里 可以拖动,改变线段长度,移动位置,并且对边界部分也做了处理。并且解决了x y轴无限接近时,线段变得不规则的问题。只是一种思路

    Android自定义view实现水印效果

    Android自定义View实现水印效果,在界面上显示自定义的水印文字(保存以备以后使用)

    RainyView-Android 自定义View之下雨动画 效果.zip

    在创建雨滴对象的时候,以下步骤使我们需要做的:斜率赋值(我这里是指定的,因此不用计算随机斜率)计算x轴、y轴移动速度随机值计算雨滴长度随机值(同时计算x轴,y轴长度值)计算x,y坐标随机值(为了营造雨滴更好的...

    OC Extension View+X+Y+Width+Height(自定义约束).zip

    IOS OC 获取UI控件的X Y W H的值 方便做约束 // 自动创建get 和 set 方法。 // 自动创建get 和 set 方法。 @property (nonatomic, assign) CGFloat ocWidth; @property (nonatomic, assign) CGFloat ocHeight; @...

    android 实现x y轴折线图效果

    android 实现x y轴折线图效果 , 自定义view

    FinancialCustomerView-金融类自定义view.zip

    FundView.view仿蚂蚁金服基金收益趋势图v1.0 完成x轴日期提示文字、y轴收益提示文字、x轴虚线、折线图v1.1 完成长按显示距离按下焦点最近的日期以及对应收益点十字、默认上方提示收益、按下上方显示对应点的时间和...

    如何用mFC来实现斜面小球滚动动画

    double dbDistance2 = (point.x-middlepoint.x)*(point.x-middlepoint.x)+(point.y-middlepoint.y)*(point.y-middlepoint.y); double dbDistance = sqrt(dbDistance2); if(dbDistance>100.) dbDistance = 100.; ...

    微信小程序movable-view移动图片和双指缩放

    先从movable-view开始说起吧. movable-view是小程序自定义的组件.其描述为:”可移动的视图容器,在页面中可以拖拽...当movable-view大于movable-area时,movable-view的移动范围必须包含movable-area(x轴方向和y轴方

    数据结构anyview ds

    数据结构anyviewDs实验 1、试写一算法,如果三个整数X,Y和Z 的值不是依次非递增的,则通过交换,令其为 非递增。

    env_secant(x_data, y_data, view, side): 使用正割法的信封-matlab开发

    函数调用:env_secant(x_data, y_data, view, side) 在 <x> 上计算数据 <y> 的包络。 使用的方法:'割线法' env_secant() 观察最大值。 从最后一个连接点开始的每个 about <view> 点的斜率,并将它们连接到生成的...

    ios-XYW8AnimationIndicatorViewExample.zip

    仿照windows10 开机动画做的一个indicator view视图 动画效果体验极佳

    ios常用动画封装类

    * + (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; * * - (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; */ animation.timingFunction = ...

    基于c++数字逻辑电子仿真器

    移动时由于不信的擦除重画,可能将先前已画的元件,输入结点前的序号,和已经连接好的线擦除。于是我们需要重绘。 重绘所有输入结点前的序号 redrawnum(); void CMyView::redrawnum() { CClientDC dc(this); char ...

    小程序开发填坑《二十二》scroll-view高度问题

    croll-view 的高度问题: 在模拟器上可以上下拉动 但是真机上就只显示一屏 其他部分被截断了 解决方案:srcoll-view 设置sroll-y=“true” 默认scroll-y和scroll-x 都是false 补充: 根据微信小程序API上说,scroll-...

    关于View的ScrollTo, getScrollX 和 getScrollY

    当利用 Scroller 去滑动屏幕或者扩展 ScrollView 的时候,总是会用到 getScrollX 和 getScrollY 去获取当前View 滑动到的位置,那么getScrollX() 和 getScrollY() 获取的到底是什么呢? 由于getScrollX 和 ...

    通信系统的SYSTEMVIEW软件仿真

    a n i x公 司系统仿 真软 件 S y s t e mVi e w仿真和 分析 的方法 , 详 细阐述对通 信 系统的动态仿真步骤 。给 出 2 F S K调制 与解调 的仿 真电路 图及其仿真结果分析 。利 用该软件 可直观地 了解通信 系统 ,...

    Android自定义View仿腾讯TIM下拉刷新View

    一 概述 自定义 View 是 ...新建一个 RefreshView 类继承自 View ,然后我们再在 RefreshView 里面新建一个内部实体类: Circle 来看一下 Circle类的代码 #Cirlce.java class Circle { int x; int y; in

    微信小程序 scroll-view的使用案例代码详解

    scroll-view纵向滚动添加属性scroll-y,然后写一个固定高度就行了,我主要说一下scroll-view的横向滚动scroll-x: 我使用了display: flex;布局,特么的直接写在scroll-view上面,显示出来的结果总是不对头,试了好多...

Global site tag (gtag.js) - Google Analytics