Chart.java
public class Chart extends VLinearLayout implements BaseView{
private Activity context;
private ImageView m_ImageView;
private Bitmap img;
private int ScaleAngle = 0;
private Button turnLeft,turnRight;
private HLinearLayout B_LinearLayout;
private int[] WindowXY = new int[2];
public Chart(Activity context) {
super(context);
this.context = context;
m_ImageView = new ImageView(context);
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
WindowXY[0] = dm.widthPixels;
WindowXY[1] = dm.heightPixels;
B_LinearLayout = new HLinearLayout(context);
turnLeft = new Button(context);
turnLeft.setText("左转");
turnRight = new Button(context);
turnRight.setText("右转");
turnLeft.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {turnLeft();}
});
turnRight.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {turnRight();}
});
B_LinearLayout.addView(turnLeft);
turnLeft.setPadding(10, 5, 10, 5);
B_LinearLayout.addView(turnRight);
turnRight.setPadding(10, 5, 10, 5);
this.addView(B_LinearLayout);
this.addView(m_ImageView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
}
public void turnLeft(){
ScaleAngle--;
int bmpWidth = img.getWidth();
int bmpHeight = img.getHeight();
Matrix matrix = new Matrix();
matrix.setRotate( 90 * ScaleAngle);
Bitmap newBit = Bitmap.createBitmap(img, 0, 0, bmpWidth, bmpHeight, matrix, true);
m_ImageView.setImageBitmap(newBit);
}
public void turnRight(){
ScaleAngle++;
int bmpWidth = img.getWidth();
int bmpHeight = img.getHeight();
Matrix matrix = new Matrix();
matrix.setRotate( 90 * ScaleAngle);
Bitmap newBit = Bitmap.createBitmap(img, 0, 0, bmpWidth, bmpHeight, matrix, true);
m_ImageView.setImageBitmap(newBit);
}
public void setImage(String param){
if (param == null || param.equals("")){
Log.v("default", "image");
try {
img = BitmapFactory.decodeStream(context.getResources().getAssets().open("test.png"));
} catch (IOException e) {
Log.e("读取Assets下图片资源失败!", e.getMessage(), e);
}
}else{
if (param.startsWith("/")) {
img = BitmapFactory.decodeStream(ImageUtil.class.getResourceAsStream(param));
} else if (param.startsWith("res-img:")) {
try {
img = BitmapFactory.decodeStream(context.getResources().getAssets().open(param.substring(8)));
} catch (IOException e) {
Log.e("读取Assets下图片资源失败!", e.getMessage(), e);
}
} else if (param.startsWith("stream:")) {
String s = param.substring(7);
img = BitmapFactory.decodeStream(new java.io.ByteArrayInputStream(StringUtil.fromBase64(s)));
}
}
int bmpWidth = img.getWidth();
int bmpHeight = img.getHeight();
Log.v("base", bmpWidth+"");
Log.v("base", bmpHeight+"");
if(bmpWidth < WindowXY[0] && bmpHeight < WindowXY[1]){
Matrix matrix = new Matrix();
float one = (float)WindowXY[0]/bmpWidth;
float two = (float)WindowXY[1]/bmpHeight;
Log.v("one", one+"");
Log.v("two", two+"");
if(one < two){
Log.v("one", one+"");
matrix.postScale(one, one);
}else{
Log.v("two", two+"");
matrix.postScale(two, two);
}
img = Bitmap.createBitmap(img, 0, 0, bmpWidth, bmpHeight, matrix, true);
}
m_ImageView.setImageBitmap(img);
}
@Override
public String getValue() {
return null;
}
@Override
public void setValue(String text) {
}
@Override
public View getView() {
return this;
}
}
分享到:
相关推荐
当ImageView加载Bitmap时,会根据控件的大小和Bitmap的原始尺寸进行调整,以适应屏幕空间。这个过程涉及到了缩放操作。 缩放图片主要通过Matrix类来实现。Matrix是一个二维变换矩阵,可以执行平移、旋转、缩放等...
在处理自适应缩放显示时,可以使用以下代码: ```swift // 对于Retina屏幕 _detailImageView.contentMode = .scaleAspectFit // 保持比例填充,多余部分裁剪 _detailImageView.contentScaleFactor = UIScreen.main....
- `StaggeredGridLayoutManager`允许在运行时改变列数,所以可以在初始化时或者屏幕旋转时动态调整。 - 考虑到不同的屏幕密度,使用dp单位进行布局设计,并在必要时进行像素转换。 4. **DodoWaterFall**: - 这...
- 注意在使用时,百分比布局仅适用于垂直和水平方向的尺寸调整,对于旋转或倾斜等复杂布局可能不适用。 - 虽然百分比布局库非常实用,但在某些情况下可能仍需结合其他适配策略,如使用`dimen.xml`资源文件进行尺寸...
在全屏显示图片时,通常会设置ImageView的宽高为屏幕的宽高,使用`match_parent`属性。 2. **图片加载库**:在实际开发中,单纯使用ImageView可能无法满足高性能的需求,如内存管理和异步加载。常见的图片加载库有...
例如线性布局(LinearLayout)、相对布局(RelativeLayout)和网格布局(GridLayout)用于组织屏幕元素,按钮(Button)、文本框(EditText)和图像视图(ImageView)等控件用于用户交互。 3. **XML布局文件**:在...
对于贴纸,我们可以使用`ImageView`或者`UIImageView`来加载和显示图片,同时提供平移和旋转的功能。平移可以通过监听触摸事件并更新视图的位置来实现,旋转则可以借助`Matrix`(Android)或`CGAffineTransform`...
9patch图片是一种特殊的PNG格式,允许开发者指定图像的拉伸区域和不变区域,以适应不同尺寸的屏幕,特别适用于制作可自适应的背景图或按钮。 2. **动画 Animation 的使用** - **Tween Animation**:变换动画,...
- 如何实现自适应屏幕的布局设计。 - 视图的旋转(rotate)、缩放、透明度控制等动画效果。 - 布局文件优化、性能提升技巧。 3. 数据存储与管理: - 如何利用SharedPreferences进行轻量级数据存储。 - 使用SQLite...
这可能涉及到布局参数的动态调整,以及在配置变更时(如屏幕旋转)保存和恢复状态。 在实现过程中,我们还应关注性能优化。避免过度绘制,合理使用硬件加速,以及适时地复用和回收资源,都是提高应用流畅度和效率的...
6. **自适应布局**:根据屏幕尺寸和方向自动调整图片大小和位置,实现响应式设计。 7. **点击事件处理**:可能增加了点击事件监听,提供了更丰富的用户交互。 8. **自定义属性**:可能通过使用Android的属性系统...
5. **适配不同分辨率的手机**: 在Android开发中,为了确保自定义View在不同屏幕尺寸和分辨率的设备上都能正常显示,需要考虑尺寸的相对性和密度独立像素(dp)的概念。使用布局权重、百分比布局或者自适应尺寸的计算...
5. **响应尺寸变化**:为了适应界面动态变化,如屏幕旋转或视图大小调整,可能需要在`layoutSubviews`方法中重新计算并设置cornerRadius和遮罩层的半径。 6. **性能优化**:在处理大量图片时,为避免性能问题,...
对于不同分辨率和屏幕大小的设备,使用`PercentRelativeLayout`或`ConstraintLayout`可以实现自适应布局,确保图片在各种设备上都能正确显示。 通过以上知识点的综合运用,我们可以构建一个基本的图片浏览功能,...
3. 自适应屏幕:确保翻转效果在不同分辨率和屏幕方向下表现一致。 通过理解并运用FlipImageView的源码,开发者可以更灵活地定制和控制翻转动画,提升Android应用的交互性和趣味性。同时,这也为学习和研究Android...
6.2. 响应式布局:利用百分比布局或者FlexboxLayout等,实现图片在不同屏幕尺寸上的自适应。 七、用户体验提升 7.1. 载入指示器:在图片加载过程中显示加载进度,告知用户当前状态。 7.2. 错误处理:当图片加载...
- 自定义`View`:若需要更复杂的显示效果,如自适应大小、手势缩放等,可以自定义`View`继承`ImageView`,重写`onDraw()`方法。 3. **图像编辑**: - **缩放**:使用`Matrix`类进行图像缩放,通过设置`Matrix....
这种图片在边缘有额外的标记,指示哪些区域可以拉伸,哪些区域保持不变,常用于按钮、背景等需要自适应形状的元素。 6. 动画序列帧: 对于动画效果,可以使用多个静态图片组成一个序列,通过AnimationDrawable或者...