2017-02-17 6 views
-1

Я вижу упражнение во время работы Android Studio. Цель; Пирамида - это создать путь с разными числами сверху донизу.Пользовательский вид, проблемы с рендерингом в Android Studio

Я написал коды, но это приложение не работает. Я вижу это сообщение об ошибке:

Пользовательское представление Ekran не использует конструкторы View 2 или 3 аргумента; XML-атрибуты не будут работать.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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" 
    tools:context="com.example.as.deneme2.MainActivity"> 
    <com.example.as.deneme2.Ekran 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/ekran" /> 
</RelativeLayout> 

MainActivity.java

public class MainActivity extends AppCompatActivity { 
Ekran ekran; 
Bulmaca[] bulmacalar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Random random = new Random(); 
    String[] bulmacaBilgileri = {"443252145336141522663", "234524435626143614625", 
      "161524246313452326215", "355424315665631243245", "653634542631351325265", 
      "543236612135654465432", "4453852793142686831417252765951383798349412830", 
      "345342468929768161215485464767167583529398619", 
      "2331549812654744213599187938583561657374389710", 
      "13492554832619237564412375353491475182356918"}; 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); 
    bulmacalar = new Bulmaca[bulmacaBilgileri.length]; 
    for (int i = 0; i < bulmacaBilgileri.length; i++) { 
     bulmacalar[i] = new Bulmaca(bulmacaBilgileri[i]); 
    } 
    ekran = (Ekran) findViewById((R.id.ekran)); 
    ekran.bulmaca = bulmacalar[random.nextInt(bulmacaBilgileri.length)]; 
    ekran.hucreGenislik = displayMetrics.widthPixels/(ekran.bulmaca.getBuyukluk() + 2); 
} 

}

Ekran.java

public class Ekran extends View { 

int hucreGenislik; 
Bulmaca bulmaca; 

public Ekran(Context context) { 
    super(context); 
} 

public void onDraw(Canvas canvas){ 
    int x1,y1,x2,y2; 
    Paint siyah = new Paint(), mavi = new Paint(), yazi= new Paint(); 
    siyah.setColor(Color.BLACK); 
    siyah.setStyle(Paint.Style.STROKE); 
    siyah.setStrokeWidth(1); 
    mavi.setColor(Color.BLUE); 
    mavi.setStyle(Paint.Style.STROKE); 
    mavi.setStrokeWidth(3); 
    if(bulmaca!=null){ 
     for(int i=0;i<bulmaca.getBuyukluk();i++){ 
      for (int j=0;j<=i;j++){ 
       x1=(int)((bulmaca.getBuyukluk()-i+1+2*j)/2.0)*hucreGenislik; 
       y1=(i+1)*hucreGenislik; 
       x2=x1+hucreGenislik; 
       y2=y1+hucreGenislik; 
       Rect alan= new Rect(x1,y1,x2,y2); 
       if(bulmaca.oynananDeger(i)!=j) { 
        canvas.drawRect(alan, siyah); 
       }else { 
        canvas.drawRect(alan, mavi); 
       } 
       String sayi=""+bulmaca.sayi(i,j); 
       int fontBuyukluk =(int) (hucreGenislik/1.5); 
       yazi.setTextSize(fontBuyukluk); 
       Rect yaziBuyukluk= new Rect(); 
       yazi.getTextBounds(sayi,0,1,yaziBuyukluk); 
       canvas.drawText(sayi,alan.left+(hucreGenislik-yaziBuyukluk.width())/2, 
         (float)(alan.top+hucreGenislik-yaziBuyukluk.height()/2),yazi); 
       } 
      } 
     } 
    } 
    public boolean onTouchEvent(MotionEvent event){ 
     int x1,y1,x2,y2; 
     int x=(int) event.getX(); 
     int y=(int) event.getY(); 
     for (int i=0; i<bulmaca.getBuyukluk();i++){ 
      for(int j=0;j<=i;j++){ 
       x1=(int)((bulmaca.getBuyukluk()-i+1+2*j)/2.0)*hucreGenislik; 
       y1=(i+1)*hucreGenislik; 
       x2=x1+hucreGenislik; 
       y2=y1+hucreGenislik; 
       Rect alan=new Rect(x1,y1,x2,y2); 
       if(alan.contains(x,y)){ 
        bulmaca.oyna(i,j); 
        invalidate(); 
        return true; 
       } 
      } 
     } 
     return true; 
    } 
} 

Bulm aca.java

public class Bulmaca { 
int buyukluk; 
int[][] sayilar; 
int[] oynama; 
public Bulmaca(String bulmacaBilgisi){ 
    int k=0; 
    buyukluk=(int) Math.sqrt(2*bulmacaBilgisi.length()); 
    oynama= new int[buyukluk]; 
    sayilar = new int[buyukluk][]; 
    for(int i=0;i<buyukluk;i++){ 
     oynama[i]=-1; 
     sayilar[i]=new int[i+1]; 
     for(int j=0; j<=i;j++){ 
      sayilar[i][j]=bulmacaBilgisi.charAt(k)-48; 
      k++; 
     } 
    } 
} 
public int sayi(int satir,int sutun){ 
    return sayilar[satir][sutun]; 
} 
public int oynananDeger(int satir){ 
    return oynama[satir]; 
} 
public void oyna(int satir,int deger){ 
    oynama[satir]=deger; 
} 
public int getBuyukluk(){ 
    return buyukluk; 
} 

}

+0

Пользовательский вид требует наличия всех четырех конструкторов, иначе вы не сможете использовать его в XML, а также программу .add all constructor –

ответ

0

Если вы читаете через ошибки

Пользовательский вид Экран не используя 2- или 3-аргумента View конструкторами; Атрибуты XML не будут работать.

Вам не хватает конструкторов в вашем Ekran.java.

public CustomProgressBar(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
} 

public CustomProgressBar(Context context, AttributeSet attrs, int defStyleAttr) 
{ 
    super(context, attrs, defStyleAttr); 
} 

Добавить следующие конструкторы, и все должно быть хорошо.

Смежные вопросы