我想改变依赖于滑块位置的圆半径圆形半径变化的Android进度条动态变化
我是单独创建的。 ,同时将圆形方法应用于进度栏。 面临错误。
其实我所说的进度条(搜索栏)与
setContentView(R.layout.main);
,并绘制圆,你知道我必须用setContentView(demoview);
查询:我想合并这两个布局显示到图像中。
我不知道它有可能吗?
任何指导,教程相当可观。
感谢您为我的查询提供宝贵的时间。 希望你有解决方案。
我想改变依赖于滑块位置的圆半径圆形半径变化的Android进度条动态变化
我是单独创建的。 ,同时将圆形方法应用于进度栏。 面临错误。
其实我所说的进度条(搜索栏)与
setContentView(R.layout.main);
,并绘制圆,你知道我必须用setContentView(demoview);
查询:我想合并这两个布局显示到图像中。
我不知道它有可能吗?
任何指导,教程相当可观。
感谢您为我的查询提供宝贵的时间。 希望你有解决方案。
检查了这一点.. 我不使用Android的搜索条,相反,我正在画在画布上的类似搜索条.. 检查这个代码可以帮助ü..
package com.test;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class SampleComp extends View implements OnTouchListener {
private Paint paint = null;
private int width = 0;
private int height = 0;
private int barStartX = 20;
private int barStartY = 20;
private int barEndX;
private int barEndY = 30;
private int radius;
private int heightAvailableForCircle;
private int widthAvailableForCircle;
private int maxRadius;
private int totalSeekBarLength;
private int currentSeekBarLength = 10;
private int whatPercentOfSeekBarIsSelected = 50;
public SampleComp(Context context) {
super(context);
paint = new Paint();
paint.setAntiAlias(true);
setOnTouchListener(this);
}
public SampleComp(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setAntiAlias(true);
}
public SampleComp(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
paint = new Paint();
paint.setAntiAlias(true);
}
@Override
public void onDraw(Canvas canvas){
barEndX = getWidth() - 20;
paint.setColor(Color.WHITE);
setWidth(canvas.getWidth());
setHeight(canvas.getHeight());
setHeightAvailableForCircle(getViewHeight() - barEndY);
setWidthAvailableForCircle(getViewWidth() - 40);
System.out.println("heightAvailableForCircle: "+getAvailableHeightForCircle());
System.out.println("widthAvailableForCircle: "+getWidthAvailableForCircle());
totalSeekBarLength = barEndX - barStartX;
System.out.println("SEEK LEN: "+totalSeekBarLength);
canvas.drawRect(barStartX, barStartY, barEndX, barEndY, paint);
paint.setColor(Color.BLUE);
setMaxRadius(heightAvailableForCircle, widthAvailableForCircle);
whatPercentOfSeekBarIsSelected = getSelectedSeekBarPercentage(totalSeekBarLength,getCurrentSeekBarLenghtSelected());
System.out.println("whatPercentOfSeekBarIsSelected: "+whatPercentOfSeekBarIsSelected);
System.out.println("!!!!!: "+canvas.getWidth());
System.out.println("@@@@: "+getViewWidth());
System.out.println("^^^^^^^^^************: "+ (whatPercentOfSeekBarIsSelected * (getViewWidth() - 40))/100);
canvas.drawRect(barStartX, barStartY, ((whatPercentOfSeekBarIsSelected * (getViewWidth() - 40))/100) + 20,
barEndY, paint);
paint.setColor(Color.GRAY);
setRadius(whatPercentOfSeekBarIsSelected);
canvas.drawCircle((canvas.getWidth())/2, (canvas.getHeight() - 30)/2, radius, paint);
}
private void setRadius(int per){
this.radius = (getMaxRadius() * per)/100;
}
private int getSelectedSeekBarPercentage(int total, int current){
int per = 0;
per = ((current * 100)/total);
return per;
}
private void setRadius(int total, int current){
System.out.println("total: "+total);
System.out.println("current: "+current);
this.radius = (((getMaxRadius()/2) * current)/100);
System.out.println("radius: "+this.radius);
}
private void setMaxRadius(int h, int w){
this.maxRadius = h < w ? h/2 : w/2 ;
}
private int getMaxRadius(){
return this.maxRadius;
}
private void setWidth(int w){
this.width = w;
}
private void setHeight(int h){
this.height = h;
}
private int getViewWidth(){
return this.width;
}
private int getViewHeight() {
return this.height;
}
private void setHeightAvailableForCircle(int availableHeightForCircle){
this.heightAvailableForCircle = availableHeightForCircle;
}
private int getAvailableHeightForCircle(){
return this.heightAvailableForCircle;
}
private void setWidthAvailableForCircle(int wid){
this.widthAvailableForCircle = wid;
}
private int getWidthAvailableForCircle(){
return this.widthAvailableForCircle;
}
private void setCurrentSeekBarLength(int x){
this.currentSeekBarLength = x;
}
private int getCurrentSeekBarLenghtSelected(){
return this.currentSeekBarLength;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
System.out.println("x: "+x);
System.out.println("y: "+y);
if(x >= 10 && x<= barEndX && y >= 10 && y <= 30){
System.out.println("TRUE");
setCurrentSeekBarLength(x - 20);
invalidate();
}
return false;
}
}
这是我的活动等级:
package com.test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.widget.ImageView;
public class SampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleComp(this));
}
}
ü可以是更具体一点关于移动你想要实现的。乌尔的问题并不那么清楚。我能弄明白的是,你想根据进度条值增加/减小圆的半径。
这是我的第二要务。现在我想在布局中显示带有进度条的圆圈可能吗?怎么样? 之后,我想用进度条更改半径。 希望你现在清楚这个... – NovusMobile 2012-02-22 13:18:16
看看android custom component guide。你基本上必须从android.view.View
派生你的圈子组件。然后,您可以像其他任何组件一样将其添加到您的布局中。
我并不完全明白,你在努力达到什么目的。您是否要根据滑块位置更改圆弧半径? – henrik 2012-02-22 12:56:07
是的..你是100%的权利。但在此之前,我想要在一个屏幕上同时显示两个屏幕,而我正面临错误。 – NovusMobile 2012-02-22 13:05:20