Java 在imageview android中捕获图像的中心绘制一个圆
我必须在图像视图中拍摄的图像的中心画一个圆圈,并保存在DB中。首先捕获图像并裁剪图像,在图像中心画圆,显示在图像视图中,并保存在DB中。圆圈不是画出来的。我尝试了很多方法。请帮帮我 activity_main.xmlJava 在imageview android中捕获图像的中心绘制一个圆,java,android,Java,Android,我必须在图像视图中拍摄的图像的中心画一个圆圈,并保存在DB中。首先捕获图像并裁剪图像,在图像中心画圆,显示在图像视图中,并保存在DB中。圆圈不是画出来的。我尝试了很多方法。请帮帮我 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:la
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:baselineAligned="false"
tools:context=".MainActivity"
android:weightSum="1">
<Button
android:id="@+id/btn_select_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:text="Select Image" />
<LinearLayout
android:layout_width="226dp"
android:layout_height="231dp"
android:orientation="vertical"
android:weightSum="1">
<ImageView
android:id="@+id/img_photo"
android:layout_width="200dp"
android:layout_height="500dp"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:layout_weight="0.45" />
</LinearLayout>
<LinearLayout
android:layout_width="280dp"
android:layout_height="77dp"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal">
<TextView
android:id="@+id/xPos"
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0.32"
android:gravity="left|center_vertical"
android:padding="5dip"
android:visibility="invisible" />
<TextView
android:id="@+id/yPos"
android:layout_width="5dp"
android:layout_height="wrap_content"
android:layout_weight="0.32"
android:gravity="right|center_vertical"
android:padding="5dip"
android:visibility="invisible" />
</LinearLayout>
</LinearLayout>
cropingoptionadapter.java
package knuckle.app.com.knuckleauthentication;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import knuckle.app.com.knuckleauthentication.R;
import android.support.v7.app.AppCompatActivity;
public class CropingOptionAdapter extends ArrayAdapter {
private ArrayList mOptions;
private LayoutInflater mInflater;
public CropingOptionAdapter(Context context, ArrayList options) {
super(context, R.layout.croping_selector, options);
mOptions = options;
mInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup group) {
if (convertView == null)
convertView = mInflater.inflate(R.layout.croping_selector, null);
CropingOption item = (CropingOption) mOptions.get(position);
if (item != null) {
((ImageView) convertView.findViewById(R.id.img_icon)).setImageDrawable(item.icon);
((TextView) convertView.findViewById(R.id.txt_name)).setText(item.title);
return convertView;
}
return null;
}
}
Datahelper.java
package knuckle.app.com.knuckleauthentication;
import java.io.ByteArrayOutputStream;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
public class DataHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "knuckledb";
public static final String TABLE_NAME = "tbl_knuckle_img";
public static final int DATABASE_VERSION = 1;
public static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT, img BLOB NOT NULL, description TEXT NULL)";
public static final String DELETE_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
public DataHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
// Create the table
db.execSQL(CREATE_TABLE);
}
//Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Drop older table if existed
db.execSQL(DELETE_TABLE);
//Create tables again
onCreate(db);
}
public void insertBitmap(Bitmap bm) {
// Convert the image into byte array
ByteArrayOutputStream out = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, out);
byte[] buffer = out.toByteArray();
// Open the database for writing
SQLiteDatabase db = this.getWritableDatabase();
// Start the transaction.
db.beginTransaction();
ContentValues values;
int width=bm.getWidth();
int height=bm.getHeight();
int centerX=width/2;
int centerY=height/2;
try {
values = new ContentValues();
values.put("img", buffer);
values.put("description", "knuckle image");
values.put("centerX", centerX);
values.put("centerY", centerY);
// Insert Row
long i = db.insert(TABLE_NAME, null, values);
Log.i("Insert", i + "");
// Insert into database successfully.
db.setTransactionSuccessful();
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
db.endTransaction();
// End the transaction.
db.close();
// Close database
}
}
public Bitmap getBitmap(int id) {
Bitmap bitmap = null;
// Open the database for reading
SQLiteDatabase db = this.getReadableDatabase();
// Start the transaction.
db.beginTransaction();
try {
String selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE id = " + id;
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
// Convert blob data to byte array
byte[] blob = cursor.getBlob(cursor.getColumnIndex("img"));
// Convert the byte array to Bitmap
bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
}
}
db.setTransactionSuccessful();
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
db.endTransaction();
// End the transaction.
db.close();
// Close database
}
return bitmap;
}
}
你想在这个链接中画这样的图像吗 [绘制圆形图像]
您可以在应用程序中使用文件RoundedImageView.java,并在XMl布局中使用它,而不是在ImageView中使用它。否。只需在捕获图像的中心添加一个圆圈即可
package knuckle.app.com.knuckleauthentication;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import knuckle.app.com.knuckleauthentication.R;
import android.support.v7.app.AppCompatActivity;
public class CropingOptionAdapter extends ArrayAdapter {
private ArrayList mOptions;
private LayoutInflater mInflater;
public CropingOptionAdapter(Context context, ArrayList options) {
super(context, R.layout.croping_selector, options);
mOptions = options;
mInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup group) {
if (convertView == null)
convertView = mInflater.inflate(R.layout.croping_selector, null);
CropingOption item = (CropingOption) mOptions.get(position);
if (item != null) {
((ImageView) convertView.findViewById(R.id.img_icon)).setImageDrawable(item.icon);
((TextView) convertView.findViewById(R.id.txt_name)).setText(item.title);
return convertView;
}
return null;
}
}
package knuckle.app.com.knuckleauthentication;
import java.io.ByteArrayOutputStream;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
public class DataHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "knuckledb";
public static final String TABLE_NAME = "tbl_knuckle_img";
public static final int DATABASE_VERSION = 1;
public static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT, img BLOB NOT NULL, description TEXT NULL)";
public static final String DELETE_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
public DataHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
// Create the table
db.execSQL(CREATE_TABLE);
}
//Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Drop older table if existed
db.execSQL(DELETE_TABLE);
//Create tables again
onCreate(db);
}
public void insertBitmap(Bitmap bm) {
// Convert the image into byte array
ByteArrayOutputStream out = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, out);
byte[] buffer = out.toByteArray();
// Open the database for writing
SQLiteDatabase db = this.getWritableDatabase();
// Start the transaction.
db.beginTransaction();
ContentValues values;
int width=bm.getWidth();
int height=bm.getHeight();
int centerX=width/2;
int centerY=height/2;
try {
values = new ContentValues();
values.put("img", buffer);
values.put("description", "knuckle image");
values.put("centerX", centerX);
values.put("centerY", centerY);
// Insert Row
long i = db.insert(TABLE_NAME, null, values);
Log.i("Insert", i + "");
// Insert into database successfully.
db.setTransactionSuccessful();
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
db.endTransaction();
// End the transaction.
db.close();
// Close database
}
}
public Bitmap getBitmap(int id) {
Bitmap bitmap = null;
// Open the database for reading
SQLiteDatabase db = this.getReadableDatabase();
// Start the transaction.
db.beginTransaction();
try {
String selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE id = " + id;
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
// Convert blob data to byte array
byte[] blob = cursor.getBlob(cursor.getColumnIndex("img"));
// Convert the byte array to Bitmap
bitmap = BitmapFactory.decodeByteArray(blob, 0, blob.length);
}
}
db.setTransactionSuccessful();
} catch (SQLiteException e) {
e.printStackTrace();
} finally {
db.endTransaction();
// End the transaction.
db.close();
// Close database
}
return bitmap;
}
}