android中怎么获取一个bitmap在屏幕中位置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中怎么获取一个bitmap在屏幕中位置?相关的知识,希望对你有一定的参考价值。
想要的到bitmap的左上角在屏幕中的坐标。。。有什么办法啊
参考技术A 是要编写一个这样的功能么,android提供的api里面一般图片都是bitmap,可以通过canvas.drawbitmap的方法在view进行图片的绘制,在方法中需要进行传入一个类型为matrix的参数,设置martrix的一些参数就可以进行图片的放大的绘制,这只是显示,也就是mvc中的view层,然后通过提供的一些触摸函数的重写并实现自己需要的一些功能,如拖动,实际上就是改变bitmap绘制的位置。关于触摸的处理和图片的绘制可以在网上进行一些教程的搜索,我就不罗列了,最终就是需要通过控制函数来改变图片的绘制方式,这也许就是你所需要的功能。 参考技术B android中想要获取一个bitmap在屏幕中位置可以通过以下代码实现:RectF
r
=
new
RectF();
matrix.mapRect(r);
Log.i(TAG,
"Rect
"
+
r.left
+
"
"
+
r.top
+
"
"
+
r.right
+
"
"
+
r.bottom
+
"
"
+
mOverAllScale
+
"
");
Android中将布局文件转成bitmap
在实践中发现,有些需要打印的小票高度小于屏幕的高度,而有些小票内容过多高度高于屏幕高度。
小于屏幕高度的布局文件转成bitmap较为容易,高于屏幕高度的布局文件转成长图bitmap较为复杂。
一.小于屏幕高度的布局文件转成bitmap
1.需求
在交易过程中常常需要打印小票,利用布局文件组织小票格式,并将其转成bitmap之后打印出来较为方便。
2.布局文件转bitmap
public class ReceiptViewActivity extends Activity{
private View view;
private boolean isEnd = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.activity_receiptview, null);
setContentView(view);
new Thread(new Runnable() {
@Override
public void run() {
while (!isEnd){
try {
view.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
Pic pic = new Pic(bitmap);
Printer printer = new Printer(SaleActivity.dal);
int printstatus = printer.printbitmap(pic);
if (printstatus == 0){
isEnd = true;
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}).start();
}
}
二.高于屏幕高度的布局文件转成bitmap
1.需求
有时小票内容过多,屏幕显示不下,需要滚动显示并打印完整小票。
2.利用ScrlooView实现滚动显示
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@color/white"
android:orientation="vertical"
android:scrollbars="none"
android:id="@+id/scrollview">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/counter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/greater_magrin_space"
android:gravity="center"
android:text="10s"
android:textColor="@color/black"
android:textSize="@dimen/content_text_size_standard"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/greater_magrin_space"
android:gravity="center"
android:text="@string/title_sale"
android:textColor="@color/black"
android:textSize="@dimen/content_text_size_standard"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/content_header_space"
android:gravity="center"
android:text="@string/processing"
android:textColor="@color/black"
android:textSize="@dimen/content_text_size_standard"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/greater_magrin_space" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/greater_magrin_space"
android:gravity="center"
android:text="10s"
android:textColor="@color/black"
android:textSize="@dimen/content_text_size_standard"/>
</LinearLayout>
</ScrollView>
3.布局文件转bitmap
public class ReceiptViewActivity extends Activity{
private ScrollView scrollView;
private boolean isEnd = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receiptview);
scrollView = (ScrollView)findViewById(R.id.scrollview);
new Thread(new Runnable() {
@Override
public void run() {
while (!isEnd){
try {
Bitmap bitmap = getBitmapByView(scrollView);
Pic pic = new Pic(bitmap);
Printer printer = new Printer(SaleActivity.dal);
int printstatus = printer.printbitmap(pic);
if (printstatus == 0){
isEnd = true;
}
}catch (Exception e){
e.printStackTrace();
}
}
}
}).start();
}
//ScrollView 转成bitmap长图
public static Bitmap getBitmapByView(ScrollView scrollView) {
int h = 0;
Bitmap bitmap = null;
for (int i = 0; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
scrollView.getChildAt(i).setBackgroundColor(
Color.parseColor("#ffffff"));
}
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
Bitmap.Config.RGB_565);
final Canvas canvas = new Canvas(bitmap);
scrollView.draw(canvas);
return bitmap;
}
}
以上是关于android中怎么获取一个bitmap在屏幕中位置?的主要内容,如果未能解决你的问题,请参考以下文章
android 文本框中 加入多个bitmap图片, 点击bitmap 弹出对话框 该怎么写呢 是否要获取透明的焦点?