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);
}
}
相关推荐
- `onLayout()`方法负责设置每个子View在父View内的精确位置。开发者可以重写此方法来自定义布局逻辑。 - **layout(left, top, right, bottom)**:此方法用于设置View的边界,参数分别对应于Rect的四个值。 4. **...
例如,将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添加各种Tween动画,包括平移、渐变、旋转和放大缩小等基本效果。 首先,我们要了解...
本文将深入探讨Android View的旋转机制,包括源码分析、旋转方式以及如何在实际应用中实现。 首先,Android中的View旋转主要通过`setRotation()`、`setRotationX()`和`setRotationY()`这三个方法来实现。它们分别...
在Qt框架中,QGraphicsView是一个非常强大的控件,它用于显示复杂的2D图形场景,支持缩放、平移等操作。在这个特定的案例中,我们关注的是如何利用QGraphicsView来实现自定义的标尺和刻度线效果,而不需要额外引入...
最后,更新`mChangeImageBackgroundRect`的坐标,使其表示View在屏幕上的完整位置,并使用`contains()`方法判断触摸点(x, y)是否在Rect区域内。 注意,`contains()`方法返回true表示触摸点在Rect内,否则返回false...
- 对于Property Animation,代码可能使用了ObjectAnimator或ValueAnimator来改变View的属性,如X坐标、Y坐标、旋转角度或透明度。由于属性动画会实际更新对象状态,所以即使动画结束后,View的位置、大小或透明度也...
通过`ObjectAnimator`类,我们可以轻松地为View的X和Y坐标创建平移动画。例如: ```java ObjectAnimator animation = ObjectAnimator.ofFloat(view, "translationX", newX); animation.setDuration(200); // 动画时...
本教程将探讨如何通过自定义View来实现水印效果,让应用能够在屏幕上动态地展示自定义的文字水印。水印通常用于保护版权或者增加信息提示,比如时间戳、公司标志等。 首先,我们需要创建一个新的Java类,继承自`...
`TranslateAnimation`类允许开发者创建一个平移动画,通过改变View的x和y坐标来模拟移动。以下是如何创建并应用一个简单的`TranslateAnimation`: 1. **创建动画对象**: 首先,你需要创建一个`TranslateAnimation...
首先,要使用`QGraphicsView`画折线图,我们需要创建一个自定义的`QGraphicsItem`子类,例如`LineGraphItem`,这个类将负责绘制折线图的各个线段。每个线段都是由一系列的点(`QPointF`)连接而成,这些点在`...
这个方法需要传入目标View、相对于View的X偏移量和Y偏移量。为了使其水平居中,我们可以计算PopupWindow的宽度和目标View的中心位置,然后设置X偏移量为两者差值的一半。Y偏移量通常设置为正值,以确保PopupWindow在...
2. **调整容器的布局方式**:确保父容器能够正确地“感知”子元素的变化,并据此调整自身高度。 3. **适配微信小程序特性**:考虑到微信小程序的特定限制和优化方式。 #### 三、详细实现步骤 ##### 1. 页面结构...
上述代码中,我们使用了`ObjectAnimator`来创建一个平滑的动画,将头部View的高度从原值逐渐变为新的高度。`setDuration`方法用于设置动画的持续时间,可以根据实际需求调整。 5. **注意事项**: - 要确保头部...
这意味着,如果在多级嵌套的ViewGroup中,`x`和`y`会被父View的坐标系所影响。例如,如果在一个LinearLayout中有一个Button,当你点击Button时,`x`和`y`将表示相对于这个Button的左上角的位置。 相比之下,`rawX`...
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个像素。 然后,...
4. **TranslateAnimation**:平移动画,用于改变视图的位置,可以设置在X轴和Y轴上的移动距离。 5. **RotateAnimation**:旋转动画,使视图围绕一个点进行旋转,可指定旋转角度和中心点。 **二、如何创建和应用View...
同时,为了避免当X或Y轴接近0时,线段变得不规则,我们可能需要使用较小的精度进行坐标计算,例如使用浮点数而非整数,或者在比较坐标距离时设定一个最小阈值。 ```java // 在ACTION_MOVE中检查边界并限制坐标 if ...
ScaleAnimation类用于实现这一功能,通过设置fromXScale、toXScale、fromYScale和toYScale参数,可以控制View在X轴和Y轴上的放大或缩小。例如,当用户点击一个图片时,可以制作一个让图片从小变大的放大动画,以增强...