① android怎样使自定义的view里的bitmap图片居中
几个重要知识点:
1、布局文件中android:scaleType="matrix" 设置图片动态缩放
2、matrix.postTranslate(dx,dy); 平移图片 matrix.postScale(sx,sy,p.x,p.y); 缩放图片
3、两点的中点、距离计算方式,限制缩放范围函数,在指定区域内移动图片方法
示例
{
privatestaticfinalintNONE=0;
privatestaticfinalintDRAG=1;
privatestaticfinalintZOOM=2;
privateintmode=NONE;
privatefloatoldDist;
privateMatrixmatrix=newMatrix();
privateMatrixsavedMatrix=newMatrix();
privatePointFstart=newPointF();
privatePointFmid=newPointF();
ImageViewview;
Bitmapbitmap;
DisplayMetricsdm;
floatminScaleR=0.1f;//最少缩放比例
staticfinalfloatMAX_SCALE=4f;//最大缩放比例
floatdist=1f;
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view=(ImageView)findViewById(R.id.image_view);
bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test);
dm=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);//获取分辨率
matrix.setScale(minScaleR,minScaleR);//开始先缩小
matrix.postTranslate(120,120);//图片的位置相对于imageview的左上角往右往下各偏移120个像素
view.setImageMatrix(matrix);
view.setOnTouchListener(newOnTouchListener()
{
@Override
publicbooleanonTouch(Viewv,MotionEventevent)
{
ImageViewview=(ImageView)v;
switch(event.getAction()&MotionEvent.ACTION_MASK)
{
caseMotionEvent.ACTION_DOWN://单点
Toast.makeText(Main.this,bitmap.getWidth()+"*"+bitmap.getHeight(),Toast.LENGTH_LONG).show();
savedMatrix.set(matrix);
start.set(event.getX(),event.getY());
mode=DRAG;
break;
caseMotionEvent.ACTION_UP://单点弹起
caseMotionEvent.ACTION_POINTER_UP://多点弹起
mode=NONE;
break;
caseMotionEvent.ACTION_POINTER_DOWN://多点
oldDist=spacing(event);
if(oldDist>10f)
{
savedMatrix.set(matrix);
midPoint(mid,event);
mode=ZOOM;
}
break;
caseMotionEvent.ACTION_MOVE://按下且在拖动
if(mode==DRAG)
{
matrix.set(savedMatrix);
matrix.postTranslate(event.getX()-start.x,event.getY()-start.y);//xy方向都可以拖动
//matrix.postTranslate(event.getX()-start.x,0);//只在x轴方向拖动即左右拖动上下不动
//matrix.postTranslate(0,event.getY()-start.y);//只在y轴方向拖动即上下拖动左右不动
}
elseif(mode==ZOOM)
{
floatnewDist=spacing(event);
if(newDist>10f)
{
matrix.set(savedMatrix);
floatscale=newDist/oldDist;
matrix.postScale(scale,scale,mid.x,mid.y);
}
}
break;
}
view.setImageMatrix(matrix);
CheckScale();//限制缩放范围
center();//居中控制
returntrue;
}
//两点的距离
privatefloatspacing(MotionEventevent)
{
floatx=event.getX(0)-event.getX(1);
floaty=event.getY(0)-event.getY(1);
returnFloatMath.sqrt(x*x+y*y);
}
//两点的中点
privatevoidmidPoint(PointFpoint,MotionEventevent)
{
floatx=event.getX(0)+event.getX(1);
floaty=event.getY(0)+event.getY(1);
point.set(x/2,y/2);
}
});
}
//限制最大最小缩放比例
protectedvoidCheckScale()
{
floatp[]=newfloat[9];
matrix.getValues(p);
if(mode==ZOOM)
{
if(p[0]<minScaleR)
{
matrix.setScale(minScaleR,minScaleR);
}
if(p[0]>MAX_SCALE)
{
matrix.set(savedMatrix);
}
}
}
//自动居中左右及上下都居中
protectedvoidcenter()
{
center(true,true);
}
privatevoidcenter(booleanhorizontal,booleanvertical)
{
Matrixm=newMatrix();
m.set(matrix);
RectFrect=newRectF(0,0,bitmap.getWidth(),bitmap.getHeight());
m.mapRect(rect);
floatheight=rect.height();
floatwidth=rect.width();
floatdeltaX=0,deltaY=0;
if(vertical)
{
//intscreenHeight=dm.heightPixels;//手机屏幕分辨率的高度
intscreenHeight=400;
if(height<screenHeight)
{
deltaY=(screenHeight-height)/2-rect.top;
}elseif(rect.top>0)
{
deltaY=-rect.top;
}elseif(rect.bottom<screenHeight)
{
deltaY=view.getHeight()-rect.bottom;
}
}
if(horizontal)
{
//intscreenWidth=dm.widthPixels;//手机屏幕分辨率的宽度
intscreenWidth=400;
if(width<screenWidth)
{
deltaX=(screenWidth-width)/2-rect.left;
}elseif(rect.left>0)
{
deltaX=-rect.left;
}elseif(rect.right<screenWidth)
{
deltaX=screenWidth-rect.right;
}
}
matrix.postTranslate(deltaX,deltaY);
}
}
[html]viewplain
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_width="200dip"
android:layout_height="200dip"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="matrix"
android:src="@drawable/test"
android:id="@+id/image_view">
</ImageView>
</RelativeLayout>
② 安卓的textview怎么居中
android编程中textview居中的方法有2中方式
【主要方式】
layout下的布局文件内居中。
代码动态设置textview居中。
【主要原理】
调用android sdk提供的api方法进行设置textview 居中显示。
【详细实现方式】
layou下的布局居中
如下图所示:
java">TextView.setGravity(Gravity.CENTER);设置文字内容居中
//设置控件布局居中
RelativeLayout.LayoutParamslayoutParams=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);mTextView.setLayoutParams(layoutParams);
【最后】
推荐使用在layout下面进行设置,容易进行开发,调试。
③ Android中如何让控件居中
方法一:设置父布局的属性,但是framelayout是没有居中效果的
线性布局linearlayout和相对布局relativelayout比较常用
下面是两个textview在LinearLayout线性布局下的效果
<LinearLayoutxmlns: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"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text2"/>
</LinearLayout>
④ android textview 怎么设置某一区域内的文字居中显示
让android的Textview控件文字居中显示,需要在xml布局文件中对控件进行设置。
在对应布局文件中,找到该控件。
在gravity属性中设置,android:gravity="center"
⑤ android开发中textview的文本怎么居中
Android开发使TextView文本居中的办法:
在布局文件中,设置TextView的属性android:grivate="center"。
⑥ android怎么让textview字体居中
android:gravity="center"是设置文字在TextView当中居中,android:layout_gravity="center"是设置在父控件当中居中,你试试这样子,按钮宽度是warp content textview宽度是fill content 然后权重是1 两个控件高度一致应该就可以了。 textview后面再放一个相同的button 设置为不可见。