`

将子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轴详解

    - `onLayout()`方法负责设置每个子View在父View内的精确位置。开发者可以重写此方法来自定义布局逻辑。 - **layout(left, top, right, bottom)**:此方法用于设置View的边界,参数分别对应于Rect的四个值。 4. **...

    Android AnimationProvider 点击View会带动画变大

    例如,将X和Y轴的缩放因子都从1.0增加到1.5,这样View就会在动画过程中放大50%。 ```java ScaleAnimation scaleAnim = new ScaleAnimation( 1.0f, 1.5f, // 初始X和Y轴的缩放比例 1.0f, 1.5f, // 结束X和Y轴的缩放...

    android 给View添加各种动画

    在Android开发中,View动画是实现用户界面动态效果的重要手段,可以极大地提升用户体验。本文将深入探讨如何为Android中的View添加各种Tween动画,包括平移、渐变、旋转和放大缩小等基本效果。 首先,我们要了解...

    android view的旋转

    本文将深入探讨Android View的旋转机制,包括源码分析、旋转方式以及如何在实际应用中实现。 首先,Android中的View旋转主要通过`setRotation()`、`setRotationX()`和`setRotationY()`这三个方法来实现。它们分别...

    Qt QGraphicsView 控件实现标尺和刻度先效果

    在Qt框架中,QGraphicsView是一个非常强大的控件,它用于显示复杂的2D图形场景,支持缩放、平移等操作。在这个特定的案例中,我们关注的是如何利用QGraphicsView来实现自定义的标尺和刻度线效果,而不需要额外引入...

    android属性动画和view动画区别的测试代码

    - 对于Property Animation,代码可能使用了ObjectAnimator或ValueAnimator来改变View的属性,如X坐标、Y坐标、旋转角度或透明度。由于属性动画会实际更新对象状态,所以即使动画结束后,View的位置、大小或透明度也...

    Android判断touch事件点是否在view范围内的方法

    最后,更新`mChangeImageBackgroundRect`的坐标,使其表示View在屏幕上的完整位置,并使用`contains()`方法判断触摸点(x, y)是否在Rect区域内。 注意,`contains()`方法返回true表示触摸点在Rect内,否则返回false...

    可拖动的view(带简单动画)

    通过`ObjectAnimator`类,我们可以轻松地为View的X和Y坐标创建平移动画。例如: ```java ObjectAnimator animation = ObjectAnimator.ofFloat(view, "translationX", newX); animation.setDuration(200); // 动画时...

    Android自定义view实现水印效果

    本教程将探讨如何通过自定义View来实现水印效果,让应用能够在屏幕上动态地展示自定义的文字水印。水印通常用于保护版权或者增加信息提示,比如时间戳、公司标志等。 首先,我们需要创建一个新的Java类,继承自`...

    TranslateAnimation实现View的动态移动

    `TranslateAnimation`类允许开发者创建一个平移动画,通过改变View的x和y坐标来模拟移动。以下是如何创建并应用一个简单的`TranslateAnimation`: 1. **创建动画对象**: 首先,你需要创建一个`TranslateAnimation...

    QGraphicsView画折线图Qt计算线段交点QGraphicsItem得简单使用

    首先,要使用`QGraphicsView`画折线图,我们需要创建一个自定义的`QGraphicsItem`子类,例如`LineGraphItem`,这个类将负责绘制折线图的各个线段。每个线段都是由一系列的点(`QPointF`)连接而成,这些点在`...

    微信小程序中scroll-view中不设定高度实现自动滚动

    2. **调整容器的布局方式**:确保父容器能够正确地“感知”子元素的变化,并据此调整自身高度。 3. **适配微信小程序特性**:考虑到微信小程序的特定限制和优化方式。 #### 三、详细实现步骤 ##### 1. 页面结构...

    让popupwindow显示在view的上方并与该view水平居中对齐

    这个方法需要传入目标View、相对于View的X偏移量和Y偏移量。为了使其水平居中,我们可以计算PopupWindow的宽度和目标View的中心位置,然后设置X偏移量为两者差值的一半。Y偏移量通常设置为正值,以确保PopupWindow在...

    Android Touch事件rawX,rawY与x,y的区别

    这意味着,如果在多级嵌套的ViewGroup中,`x`和`y`会被父View的坐标系所影响。例如,如果在一个LinearLayout中有一个Button,当你点击Button时,`x`和`y`将表示相对于这个Button的左上角的位置。 相比之下,`rawX`...

    让ScrollView头部的View实现伸缩动画效果

    上述代码中,我们使用了`ObjectAnimator`来创建一个平滑的动画,将头部View的高度从原值逐渐变为新的高度。`setDuration`方法用于设置动画的持续时间,可以根据实际需求调整。 5. **注意事项**: - 要确保头部...

    动画实现view的转换

    myView.frame = CGRect(x: myView.frame.origin.x + 100, y: myView.frame.origin.y, width: myView.frame.width, height: myView.frame.height) } ``` 这段代码将在0.5秒内将`myView`向右平移100个像素。 然后,...

    博客《Android动画之二:View Animation》附带源码 ViewAnimationDemo

    4. **TranslateAnimation**:平移动画,用于改变视图的位置,可以设置在X轴和Y轴上的移动距离。 5. **RotateAnimation**:旋转动画,使视图围绕一个点进行旋转,可指定旋转角度和中心点。 **二、如何创建和应用View...

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

    同时,为了避免当X或Y轴接近0时,线段变得不规则,我们可能需要使用较小的精度进行坐标计算,例如使用浮点数而非整数,或者在比较坐标距离时设定一个最小阈值。 ```java // 在ACTION_MOVE中检查边界并限制坐标 if ...

    Android的View动画.rar

    ScaleAnimation类用于实现这一功能,通过设置fromXScale、toXScale、fromYScale和toYScale参数,可以控制View在X轴和Y轴上的放大或缩小。例如,当用户点击一个图片时,可以制作一个让图片从小变大的放大动画,以增强...

Global site tag (gtag.js) - Google Analytics